1. long - это на самом деле модификатор, полное название типа - long int. В чистом C (без плюсов) есть такая особенность - переменная без типа считается типа int; соответственно объявление
long a;
автоматически дополняется до
long int a;
В C++ она перетянута частично (объявлять переменные без типа уже нельзя, а вот модификаторы без типа писать можно) .
2. На 32-битных процессорах (и ОС, предназначенных для них) int и long int занимают, как правило, 32 бита. Но на 64-битных - уже 64. А вот на 16-битных int был длиной 16 бит, а long int - 32 бита. Стандарт гарантирует только то, что long int будет не короче, чем int, не более того; а конкретные условия зависят от конкретных систем.
Другие языки программирования и технологии
В чем разница между типами С++ "long" и "int"? Занимают одинаково места, диапазон один и тот же...
Нифига не одинаково. .
int 32 бита, long 64 бита
http://www.mql5.com/ru/docs/basis/types/integer/integertypes
cppreference.com/w/cpp/language/types
int 32 бита, long 64 бита
http://www.mql5.com/ru/docs/basis/types/integer/integertypes
cppreference.com/w/cpp/language/types
Стандарт языка гарантирует только что размер long int больше или равен int. Конкретные размеры могут зависеть от архитектуры, компилятора и т. д.
long - это не тип, long - это модификатор. А написание long a эквивалентно написанию long int a.
А вот чем long int отличается от int - не знаю
А вот чем long int отличается от int - не знаю
По факту sizeof(int) == 4 (99.9% систем)
sizeof(long) == 4 (Windows)
sizeof(long) == sizeof(void*) (99% НЕ Windows систем, т. е. обычно 4 или 8, в зависимости от битности приложения)
В этом смысле "long" перестал быть нужным типом. Не очень понятно, зачем его теперь использовать.
А long long [int] - это вообще другой тип, он практически везде (где он есть) 64 бита, но разговор не о нем.
PS. Вот из ссылки Бенциона самая главная цитата:
32 bit systems:
<16-битный WinAPI, который для меня уже не существует>
Потом:
ILP32 or 4/4/4 (int, long, and pointer are 32-bit); Win32 API, Unix and Unix-like systems (Linux, Mac OS X)
64 bit systems:
LLP64 or 4/4/8 (int and long are 32-bit, pointer is 64-bit) Win64 API
LP64 or 4/8/8 (int is 32-bit, long and pointer are 64-bit) Unix and Unix-like systems (Linux, Mac OS X)
Other models are VERY RARE
PPS. В общем, люди, занимающиеся мног лет мультиплатформенной разработкой, обычно неформально формулируют правила так для краткости:
- Разрядность приложения по определению равна sizeof(void*)
- int = 32 бита (99% случаев)
- long long [int] = 64 бита (99% случаев, где он есть вообще, а есть он в новых стандартах языков либо в расширениях к старым)
- long [int] = бардак
sizeof(long) == 4 (Windows)
sizeof(long) == sizeof(void*) (99% НЕ Windows систем, т. е. обычно 4 или 8, в зависимости от битности приложения)
В этом смысле "long" перестал быть нужным типом. Не очень понятно, зачем его теперь использовать.
А long long [int] - это вообще другой тип, он практически везде (где он есть) 64 бита, но разговор не о нем.
PS. Вот из ссылки Бенциона самая главная цитата:
32 bit systems:
<16-битный WinAPI, который для меня уже не существует>
Потом:
ILP32 or 4/4/4 (int, long, and pointer are 32-bit); Win32 API, Unix and Unix-like systems (Linux, Mac OS X)
64 bit systems:
LLP64 or 4/4/8 (int and long are 32-bit, pointer is 64-bit) Win64 API
LP64 or 4/8/8 (int is 32-bit, long and pointer are 64-bit) Unix and Unix-like systems (Linux, Mac OS X)
Other models are VERY RARE
PPS. В общем, люди, занимающиеся мног лет мультиплатформенной разработкой, обычно неформально формулируют правила так для краткости:
- Разрядность приложения по определению равна sizeof(void*)
- int = 32 бита (99% случаев)
- long long [int] = 64 бита (99% случаев, где он есть вообще, а есть он в новых стандартах языков либо в расширениях к старым)
- long [int] = бардак
для int можно объявить только int a;
для long можно написать long long и размер хранения в 2 раза увеличится.
Например: long long a;
для long можно написать long long и размер хранения в 2 раза увеличится.
Например: long long a;
Похожие вопросы
- Почему скомпилированный код на Ассемблер занимает меньше места чем на C, а на C меньше чем на C++?
- С/С++ зачем нужен простой int, если есть более надежные в диапазоне short, long и long long?
- [c++] не работает long int переменная объявленная как long int a; занимает всего 4 байта ((( Что может быть не так?
- C++ Про выбор типа данных. Int, char и т. д.
- Что имеется ввиду под 4 байтами у типа данных int?(С++)
- Как преобразовать тип string к типу int? C++
- C++ как переменную (signed int) разделить на старший и младший байт, а после записать в 2е другие переменные типа char?
- C# почему когда создаю тип данных byte - он его автоматически преобразовывает в тип int?
- Написать реализацию перегруженных функций: int func (int * arr, int length); int func (double * arr, int length);
- Помогите! Системный диск забит намного больше,чем показывыает...и занимаемое место постоянно растет!!!