В C целое число (для 32-битного компьютера) составляет 32 бита, и оно варьируется от -32 768 до + 32 767. В Java целое число (long) также составляет 32 бита, но оно варьируется от -2 147 483 648 до + 2 147 483 647.
Я не понимаю, как диапазон отличается в Java, хотя количество битов одинаково. Может кто-нибудь объяснить это?
Ответы:
В C , язык сам по себе не определяет представление определенных типов данных. Он может варьироваться от машины к машине, во встроенных системах он
int
может иметь ширину 16 бит, хотя обычно это 32 бит.Единственное требование заключается в том, что
short int
<=int
<=long int
по размеру. Кроме того, существует рекомендация, котораяint
должна отражать собственные возможности процессора .Все типы подписаны.
unsigned
Модификатор позволяет использовать старший бит как часть стоимости ( в противном случае он зарезервирован для знакового бита).Вот краткая таблица возможных значений для возможных типов данных:
В Java , Спецификация языка Java определяет представление типов данных.
Порядок:
byte
8 бит,short
16 бит,int
32 бита,long
64 бита. Все эти типы подписаны , нет неподписанных версий. Тем не менее, битовые манипуляции обрабатывают числа как неподписанные (то есть обрабатывают все биты правильно).Тип символьных данных
char
имеет ширину 16 бит без знака и содержит символы с использованием кодировки UTF-16 (однако можно назначитьchar
произвольное 16-разрядное целое число без знака, которое представляет недопустимую кодовую точку символа)источник
int
с ...int foo = Integer.MAX_VALUE + 1; System.out.println(Integer.toUnsignedLong(foo));
prints2147483648
и char - это тип без знакаInteger.MAX_VALUE + 1
находится0x80000000
в шестнадцатеричном, из-за переполнения (и составляетInteger.MIN_VALUE
). Если вы преобразуете его в unsigned (long), бит знака будет обрабатываться как бит значения, так и будет2147483648
. Спасибо заchar
примечание.char
не подписан, вы правы, но char не используется для расчетов, поэтому я оставил его из списка.Неправильно. 32-разрядное целое число со знаком в представлении дополнения 2 имеет диапазон от -2 31 до 2 31 -1, который равен от 2 147 483 648 до 2 147 483 647.
источник
**
даже не C и не очень ясно, на мой взгляд. :)^
так как обычноxor
32-разрядное целое число находится в диапазоне от -2 147 483 648 до 2 147 483 647. Однако тот факт, что вы находитесь на 32-битной машине, не означает, что ваш
C
компилятор использует 32-битные целые числа.источник
int
это «естественная ширина машины», которую я бы интерпретировал как 32-битную при компиляции для 32-битных машин.Определение языка Си определяет минимальные диапазоны для различных типов данных. Для
int
, этот минимальный диапазон составляет -32767 до 32767, означающееint
должно быть по крайней мере , 16 бита. Реализация может предоставить более широкийint
тип с соответственно более широким диапазоном. Например, на сервере разработки SLES 10, на котором я работаю, диапазон составляет от -2147483647 до 2137483647.Есть еще некоторые системы, что там использование 16-битных
int
типов (All The World Is НеVAXx86), но есть много , что использование 32-битныхint
типов, и , возможно , некоторые из них , что использование 64-бит.Язык Си был разработан для работы на разных архитектурах. Java была разработана для работы на виртуальной машине, которая скрывает эти архитектурные различия.
источник
INT_MIN
указывается как-32767
. Не принимайте два дополнения.Строгая эквивалент Java
int
находитсяlong int
в C.Редактировать: Если
int32_t
определено, то это эквивалентно с точки зрения точности.long int
гарантировать точность javaint
, потому что она гарантированно имеет размер не менее 32 бит.источник
int32_t
если он определен вашим компиляторомЭто потому, что в C - целое число на 32-битной машине не означает, что для его хранения используются 32 бита, это может быть и 16-битный код. Это зависит от машины (зависит от реализации).
источник
int
. Ноlimits.h
помогает выяснить, что именно является истинойНа плакате смешаны типы java. в Java его C in является коротким: short (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
зависит от реализации компилятора.Например , на моем Ubuntu 64 бит у меня есть
short
в32
битах, когда на другой версии один 32bit Ubuntu это16
немного.источник
В диапазоне C для __int32 от –2147483648 до 2147483647. Смотрите полный диапазон.
Нет никаких гарантий, что int будет 32-битным, если вы хотите использовать переменные определенного размера, особенно при написании кода, который включает битовые манипуляции, вы должны использовать «Стандартные целочисленные типы».
На яве
Тип данных int представляет собой 32-разрядное целое число со знаком в виде двоичного числа со знаком. Он имеет минимальное значение -2 147 483 648 и максимальное значение 2 147 483 647 (включительно).
источник
Это на самом деле очень просто понять, вы даже можете вычислить его с помощью калькулятора Google: у вас есть 32 бита для целых, а компьютеры двоичные, поэтому вы можете иметь 2 значения на бит (спот). если вы вычислите 2 ^ 32, вы получите 4 294 967 296. поэтому, если вы разделите это число на 2 (потому что половина из них - отрицательные целые числа, а другая половина - положительные), то вы получите 2 147 483 648. и это число является самым большим целым числом, которое может быть представлено 32 битами, хотя, если вы обратите внимание, вы заметите, что 2 147 483 648 больше, чем 2 147 483 647 на 1, это потому, что одно из чисел представляет 0, которое, к сожалению, находится посередине 2 ^ 32 не является нечётным числом, поэтому у вас нет только одного числа посередине, поэтому у целых чисел с вероятностью есть на один шифр меньше, в то время как отрицательные числа получают полную половину 2 147 483 648.
И это все. Это зависит от машины, а не от языка.
источник
int
не зависит от машины.int
== 32-разрядная подпись, два дополнения определены спецификацией языка Java и выгравированы на листах анодированного unobtainium . (ОК, может быть, не последний бит.)в стандарте C вы можете использовать INT_MAX в качестве максимального значения 'int', эта константа должна быть определена в "limit.h". Подобные константы определены для других типов ( http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html ), как указано, эти константы зависят от реализации, но имеют минимальное значение в соответствии с минимальными битами для каждого типа, как указано в стандарте.
источник