Какая разница между длинными и длинными? И они оба не работают с 12-значными цифрами (600851475143), я что-то забываю?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
Какая разница между длинными и длинными? И они оба не работают с 12-значными цифрами (600851475143), я что-то забываю?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
На основных 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>
):
size_t
ptrdiff_t
long long
не существует в С++ 98/С++ 03, но существует в C99 и С++ 0x.
long
гарантируется не менее 32 бит.
long long
гарантируется не менее 64 бит.
Чтобы прокомментировать комментарий @ildjarn:
И они оба не работают с 12-значными номерами (600851475143), я что-то забываю?
Компилятор просматривает буквальное значение 600851475143
без учета переменной, которую вы назначаете ей/инициализируя ее. Вы написали его как типизированный литерал int
, и он не поместится в int
.
Используйте 600851475143LL
, чтобы получить типизированный литерал long long
.
Ваш компилятор С++ поддерживает долгое время, что гарантируется как минимум 64 бита в стандарте C99 (это стандарт C, а не стандарт С++). Смотрите заголовочный файл Visual С++, чтобы получить диапазоны в вашей системе.
Рекомендация
Для новых программ рекомендуется использовать только bool, char, int и double, пока не возникнет предположение, что необходим один из других типов.
Зависит от вашего compiler.long long - 64 бит и должен обрабатывать 12 цифр. Как и в вашем случае, он просто рассматривает его долго и, следовательно, не обрабатывает 12 цифр.