Где хранится подпись для подписанных целочисленных типов?(На Яве)

StackOverflow https://stackoverflow.com/questions/1670688

  •  13-09-2019
  •  | 
  •  

Вопрос

Например, тип данных Java byte содержит данные от -128 до 127 в одном байте в хранилище.Чтобы можно было различать значения от - 1 до -128 от 0 до 127, потребуются дополнительные данные, которые будут учитывать тип данных, соответствующий выделенному им хранилищу.По общему признанию, для этого потребуется всего 1 дополнительный бит, но он все равно проходит.

Как Java это делает?

Это было полезно?

Решение

Дополнение до двух:

Примитивные типы определены как одинаковые на всех машинах и во всех реализациях и представляют собой целые числа с двумя дополнениями различных размеров, числа с плавающей запятой стандарта IEEE 754 одинарной и двойной точности, логический тип и символ Unicode char. тип.—Спецификация языка Java:Введение

Вы можете представить это как целое число от 0 до 255, из которого 128. всегда вычтено.

Более технический:целое число может (и будет) быть инвертировано (положительное → отрицательное или наоборот), инвертируя его биты и добавляя единицу.Это почти нравиться Дополнение к одному (который просто инвертирует все биты — следовательно, дополнение.Но у дополнения есть проблема: оно имеет два разных нуля:+0 и −0 (в числах с плавающей запятой то же самое есть, но по другим и более полезным причинам ☺).Дополнение до двух решает эту проблему, добавляя единицу и тем самым расширяя диапазон отрицательных значений (вот почему это −128..127).

Каким-то образом можно сказать, что знак действительно «хранится» в первом бите числа.Итак, ваше наблюдение о том, что ему нужен один бит памяти, верно.Но числовой диапазон a byte (положительный или отрицательный, игнорируя знак) требуется всего 7 бит, поэтому у вас снова есть байт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top