Какая разница между длинными длинными и длинными

Какая разница между длинными и длинными? И они оба не работают с 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>):

  • size_t
  • ptrdiff_t

Ответ 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 цифр.