Какая разница между длинными длинными и длинными
Какая разница между длинными и длинными? И они оба не работают с 12-значными цифрами (600851475143), я что-то забываю?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
Ответы
Ответ 1
На основных 32-битных платформах:
-
int
- 32 бит
-
long
также 32 бит
-
long long
- 64 бит
На основных 64-битных платформах:
-
int
- 32 бит
-
long
- это 32 или 64 бит
-
long long
тоже 64 бит.
Переход по стандарту:
-
int
должно быть не менее 16 бит
-
long
должно быть не менее 32 бит
-
long long
должно быть не менее 64 бит
Исправьте меня, если я ошибаюсь.
Если вам нужен конкретный целочисленный размер для конкретного приложения, а не доверять компилятору, чтобы выбрать нужный размер, #include <stdint.h>
(или <cstdint>
), чтобы вы могли использовать эти типы:
-
int8_t
и uint8_t
-
int16_t
и uint16_t
-
int32_t
и uint32_t
-
int64_t
и uint64_t
Вы также можете быть заинтересованы в #include <stddef.h>
(или <cstddef>
):
Ответ 2
long long
не существует в С++ 98/С++ 03, но существует в C99 и С++ 0x.
long
гарантируется не менее 32 бит.
long long
гарантируется не менее 64 бит.
Ответ 3
Чтобы прокомментировать комментарий @ildjarn:
И они оба не работают с 12-значными номерами (600851475143), я что-то забываю?
Компилятор просматривает буквальное значение 600851475143
без учета переменной, которую вы назначаете ей/инициализируя ее. Вы написали его как типизированный литерал int
, и он не поместится в int
.
Используйте 600851475143LL
, чтобы получить типизированный литерал long long
.
Ответ 4
Ваш компилятор С++ поддерживает долгое время, что гарантируется как минимум 64 бита в стандарте C99 (это стандарт C, а не стандарт С++). Смотрите заголовочный файл Visual С++, чтобы получить диапазоны в вашей системе.
Рекомендация
Для новых программ рекомендуется использовать только bool, char, int и double, пока не возникнет предположение, что необходим один из других типов.
http://www.somacon.com/p111.php
Ответ 5
Зависит от вашего compiler.long long - 64 бит и должен обрабатывать 12 цифр. Как и в вашем случае, он просто рассматривает его долго и, следовательно, не обрабатывает 12 цифр.