максимальное значение целого числа
В C целое число (для 32-разрядной машины) составляет 32 бита, и оно колеблется от -32,768 до +32,767. В Java целое число также равно 32 битам, но оно варьируется от -2147,483,648 до +2,147,483,647.
Я не понимаю, как диапазон отличается в Java, хотя количество бит одинаково. Может кто-нибудь объяснить это?
- Преобразование символов в целые числа в Java
- Преобразование строкового массива в массив целых чисел
- Есть ли представление для ввода целых чисел в Android?
- Разница между длинными и внутренними типами данных
- Почему я не могу наследовать от int в C ++?
- Arrays.asList () массива
- Преобразование коэффициента в целое число в кадр данных
- Есть ли причина не использовать целые типы фиксированной ширины (например, uint8_t)?
- Что делает значение & 0xff в Java?
- Преобразование целочисленного в байтовый массив (Java)
- Явный целочисленный массив байтов
- Каков наиболее эффективный способ проверки двух целых диапазонов для перекрытия?
В C сам язык не определяет представление некоторых типов данных. Он может варьироваться от машины к машине, на встроенных системах int
может быть 16 бит в ширину, хотя обычно это 32 бит.
Единственное требование состоит в том, что short int
<= int
<= long int
по размеру. Кроме того, существует рекомендация, что int
должен представлять собственную емкость процессора .
Все типы подписаны. unsigned
модификатор позволяет использовать старший бит как часть значения (в противном случае он зарезервирован для бита знака).
Вот краткая таблица возможных значений возможных типов данных:
width minimum maximum signed 8 bit -128 +127 signed 16 bit -32 768 +32 767 signed 32 bit -2 147 483 648 +2 147 483 647 signed 64 bit -9 223 372 036 854 775 808 +9 223 372 036 854 775 807 unsigned 8 bit 0 +255 unsigned 16 bit 0 +65 535 unsigned 32 bit 0 +4 294 967 295 unsigned 64 bit 0 +18 446 744 073 709 551 615
В Java спецификация языка Java определяет представление типов данных.
Порядок: byte
8 бит, short
16 бит, int
32 бит, long
64 бита. Все эти типы подписаны , нет неподписанных версий. Тем не менее, манипуляции с битами обрабатывают числа, поскольку они были неподписанными (то есть правильно обрабатывают все биты).
Символ символьного типа char
имеет ширину 16 бит, без знака и содержит символы с использованием кодировки UTF-16 (однако можно назначить char
произвольное беззнаковое 16-битное целое число, которое представляет недопустимый код символа)
width minimum maximum SIGNED byte: 8 bit -128 +127 short: 16 bit -32 768 +32 767 int: 32 bit -2 147 483 648 +2 147 483 647 long: 64 bit -9 223 372 036 854 775 808 +9 223 372 036 854 775 807 UNSIGNED char 16 bit 0 +65 535
В C целое число (для 32-разрядной машины) составляет 32 бит и оно варьируется от -32768 до +32767.
Неправильно. 32-разрядное целое число со знаком в представлении комплемента 2 имеет диапазон от -2 31 до 2 31 -1, который равен -2147,483,648 до 2,147,483,647.
32-битное целое число варьируется от -2,147,483,648 до 2,147,483,647. Однако тот факт, что вы находитесь на 32-битной машине, не означает, что ваш компилятор C
использует 32-разрядные целые числа.
Определение языка C определяет минимальные диапазоны для различных типов данных. Для int
этот минимальный диапазон составляет от -32767 до 32767, то есть значение int
должно быть не менее 16 бит. Реализация может обеспечить более широкий тип int
с более широким диапазоном. Например, на сервере разработки SLES 10 я работаю, диапазон от -2147483647 до 2137483647.
Есть еще некоторые системы, которые используют 16-битные типы int
(All The World Is not VAX x86), но есть много, которые используют 32-битные типы int
и, возможно, некоторые из них используют 64-разрядные.
Язык C был разработан для работы на разных архитектурах. Java была разработана для работы на виртуальной машине, которая скрывает эти архитектурные отличия.
Это связано с тем, что в C-integer на 32-битной машине не означает, что для его хранения используются 32 бита, это может быть и 16 бит. Это зависит от машины (зависит от реализации).
Плакат имеет смешанные типы java. в java, его C in является коротким: короткий (16 бит) = -32768 до 32767 int (32 бит) = -2,147,483,648 до 2,147,483,647
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Фактически размер в битах int
, short
, long
зависит от реализации компилятора.
Например, на моем 64-битном Ubuntu у меня short
32
битное, а на другой 32-битной версии Ubuntu – 16
бит.
Строгий эквивалент java int
long int
в C.
Изменить: если int32_t
определен, то это эквивалентно с точки зрения точности. long int
гарантирует точность java int
, потому что это гарантия быть размером не менее 32 бит.
В диапазоне C для __int32 от -2147483648 до 2147483647. См. Здесь для полного диапазона.
unsigned short 0 to 65535 signed short –32768 to 32767 unsigned long 0 to 4294967295 signed long –2147483648 to 2147483647
Нет никаких гарантий, что «int» будет 32 бита, если вы хотите использовать переменные определенного размера, особенно при написании кода, который включает в себя манипуляции с битами, вы должны использовать «Стандартные типы целого».
В Java
Тип данных int представляет собой целое число дополнений, состоящее из 32 бит. Он имеет минимальное значение -2 147 483 648 и максимальное значение 2 147 483 647 (включительно).
в стандарте C вы можете использовать INT_MAX как максимальное значение «int», эта константа должна быть определена в «limits.h». Аналогичные константы определены для других типов ( http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html ), как указано, эти константы зависят от реализации, но имеют минимальное значение в соответствии с минимальными битами для каждого типа, как указано в стандарте.
На самом деле это действительно просто понять, вы можете даже вычислить его с помощью калькулятора google: у вас есть 32 бита для int, а компьютеры – двоичные, поэтому вы можете иметь 2 значения на бит (пятно). если вы вычислите 2 ^ 32, вы получите 4 294 967 296. поэтому, если вы разделите это число на 2, (потому что половина из них – отрицательные целые числа, а другая половина положительна), тогда вы получаете 2 147 483 648. и это число является самым большим int, которое может быть представлено 32 битами, хотя, если вы обратите внимание, вы заметите, что 2,147,483,648 больше, чем 2,147,483,647 на 1, это потому, что одно из чисел представляет 0, которое находится прямо в середине, к сожалению, 2 ^ 32 не является нечетным числом, поэтому у вас нет только одного числа посередине, поэтому у потенциальных целых чисел есть один меньше шифров, тогда как отрицательные получат полную половину 2,147,483,648.
Вот и все. Это зависит от машины не от языка.
На самом деле это действительно просто понять, вы можете даже вычислить его с помощью калькулятора google: у вас есть 32 бита для int, а компьютеры – двоичные, поэтому вы можете иметь 2 значения на бит (пятно). если вы вычислите 2 ^ 32, вы получите 4 294 967 296.