Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Странный код с двойным long

#c


Увидел в коде вот такое выражение:
long long value = ...;

Почему здесь long 2 раза? Это опечатка или такое корректно и действительно что-то
значит? Если так, то что изменится, если один long стереть или если, наоборот, дописать
еще один?     


Ответы

Ответ 1



Из ISO/IEC 9899:1999 (E): 4 There are five standard signed integer types, designated as signed char, short int, int, long int, and long long int. (These and other types may be designated in several additional ways, as described in 6.7.2.) There may also be implementation-defined extended signed integer types.28) The standard and extended signed integer types are collectively called signed integer types.29) — minimum value for an object of type long int LONG_MIN -2147483647 // -(2^31 - 1) — maximum value for an object of type long int LONG_MAX +2147483647 // 2^31 - 1 — minimum value for an object of type long long int LLONG_MIN -9223372036854775807 // -(2^63 - 1) — maximum value for an object of type long long int LLONG_MAX +9223372036854775807 // 2^63 - 1

Ответ 2



О константах. В комментариях нет форматирования. Поэтому сюда: #include int main() { const i = 10000000001; printf ("%ld", i); return 0; } $ gcc -o c -std=c99 c.c c.c: В функции ‘main’: c.c:3: предупреждение: в декларации ‘i’ по умолчанию установлен тип ‘int’ c.c:3: предупреждение: переполнение при неявном преобразовании константы тогда как const long long i = 10000000001l; printf("%lld", i); выводит правильно. gcc 4.3.4

Ответ 3



long и short "расширение" (не могу вспомнить/подобрать подходящее слово) для типа int. Т.е. здесь написано long long int, что по идее должно увеличить размер типа, хотя мой компилятор показывает одинаковый размер для long и long long. #include int main(){ short int i_1; int i0; long int i1; long long int i2; printf("short int = %d\nint = %d\nlong int = %d\nlong long int = %d\n", sizeof(i_1), sizeof(i0), sizeof(i1), sizeof(i2)); return 0; } Вывод: short int = 2 int = 4 long int = 8 long long int = 8

Ответ 4



Для 64-bit машины и long и long long это 64-х разрядное целое (8 байт), для 32-bit машины long это 32-х разрядное целое (4 байт), а long long 64-х разрядное целое (8 байт). Вообще, для переносимости так писать правильно.

Ответ 5



long long это 64-битное целое, аналог __int64 в Microsoft Visual C++, в то время как просто long - 32-битное целое.

Комментариев нет:

Отправить комментарий