Максимальное значение целого числа

В C целое число (для 32-разрядной машины) составляет 32 бита, и оно колеблется от -32,768 до +32,767. В Java целое число также равно 32 битам, но варьируется от -2147,483,648 до +2,147,483,647.

Я не понимаю, как диапазон отличается в Java, хотя количество бит одинаково. Может кто-нибудь объяснить это?

Ответ 1

В 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

Ответ 2

В C целое число (для 32-разрядной машины) составляет 32 бит и оно варьируется от -32768 до +32767.

Неправильно. 32-битное целое число со знаком в 2 дополнениях имеет диапазон -2 31 до 2 31 -1, который равен -2147,483,648 до 2,147,483,647.

Ответ 3

32-битное целое число от -2,147,483,648 до 2,147,483,647. Однако тот факт, что вы находитесь на 32-битной машине, не означает, что ваш компилятор C использует 32-разрядные целые числа.

Ответ 4

Определение языка C определяет минимальные диапазоны для различных типов данных. Для int этот минимальный диапазон составляет от -32767 до 32767, а значение int должно быть не менее 16 бит. Реализация может обеспечить более широкий тип int с более широким диапазоном. Например, на сервере разработки SLES 10 я работаю, диапазон от -2147483647 до 2137483647.

Есть еще некоторые системы, которые используют 16-разрядные типы int (All The World Is Not A VAX x86), но есть много, которые используют 32-разрядные типы int, и, возможно, несколько, которые используют 64-битные.

Язык C был разработан для работы на разных архитектурах. Java была разработана для работы на виртуальной машине, которая скрывает эти архитектурные отличия.

Ответ 6

Это потому, что в C-integer на 32-битной машине не означает, что для его хранения используются 32 бита, это может быть и 16 бит. Это зависит от машины (зависит от реализации).

Ответ 7

Строгим эквивалентом java int является long int в C.

Изменить: Если int32_t определено, то это эквивалентно с точки зрения точности. long int гарантирует точность java int, потому что это гарантия быть размером не менее 32 бит.

Ответ 8

Фактически размер в битах int, short, long зависит от реализации компилятора.

например. на моем 64-битном Ubuntu у меня есть short в 32 битах, когда на другой 32-битной версии Ubuntu это бит 16.

Ответ 9

В диапазоне 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-разрядное двухзначное целое число. Он имеет минимальное значение -2147,483,648 и максимальное значение 2,147,483,647 (включительно).

Ответ 10

На самом деле очень просто понять, вы даже можете вычислить его с помощью калькулятора 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.

И вот оно. Это зависит от машины не от языка.

Ответ 11

public static void main (String [] args) {

    // In here I get the maximum and minimum values of the data type called 'int'.
        System.***out***.println(Integer.MAX_VALUE);

}

Ответ 12

в стандарте C, вы можете использовать INT_MAX как максимальное значение "int", эта константа должна быть определена в "limits.h". Аналогичные константы определены для других типов (http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html), как указано, эти константы зависят от реализации, но имеют минимальное значение в соответствии с минимумом бит для каждого типа, как указано в стандарте.

Ответ 13

Это на самом деле очень просто понять, вы даже можете вычислить его с помощью калькулятора Google: у вас есть 32 бита для целых, а компьютеры двоичные, поэтому вы можете иметь 2 значения на бит (спот). если вы вычислите 2 ^ 32, вы получите 4 294 967 296.