2013-07-24 4 views
0

Я хочу знать, как можно преобразовать целое число в байты теоретически. Я имею в виду, что я не хочу использовать предопределенную программу, но хочу просто знать, как я могу ее реализовать. Что я знаю, что от -128 до 127 целое число совпадает с байтом, но проблемы от 128 до 128 до + бесконечны и от -129 до -infinite. Например, учитывая следующий код:Как преобразовать целое число в байт?

Integer a = 140;//10001100 this is his binary conversion 
    Byte zz = (byte) a.byteValue(); 
    System.out.println(zz);// result is -116 

Как это преобразование работает в Java? Заранее спасибо

+1

Посмотрите на этот ответ SOST http://stackoverflow.com/questions/842817/how-does-java-convert-int-into-byte –

+0

Байты от '-128' до' 127', '140' переполняется до '-116'. – jlordo

+0

вы заметите, что 140 + 116 = 256 – njzk2

ответ

2

Это значение выходит за пределы диапазона Byte и, следовательно, overflows.

См JLS 4.2.1:

Значения целочисленных типов являются целыми числами в следующих диапазонах:

  1. Для байта, от -128 до 127 включительно

Байт - это 8 бит, наиболее значимый бит ifies знак номера и закодированы в двух дополнениях.

Прочтите это замечательное SO answer для получения дополнительной информации.

+0

Я знаю, как я могу преобразовать его в байт? – BenMansourNizar

+1

@BenMansourNizar Какой результат вы хотите? Он не может хранить 140! – NINCOMPOOP

+0

@BenMansourNizar. В теории вы можете создать список, когда вы поместите части байта. Но на самом деле это целое или длинное. –

1

Байт значение двоичного представления не изменится, она все равно будет 10001100, но это будет интерпретироваться по-разному, так как byte является знаковым типом в дополнительном представлении http://en.wikipedia.org/wiki/Twos_complement и поскольку бит 7 установлен это означает, что теперь это отрицательное число - 116

1

, когда вы являетесь сузившим примитивом, вы должны явно сделать бросок - так что вы признаете возможную потерю данных.

Там нет никакой потери, если значение находится в диапазоне -128 ... 127 байт значения

0

Вы не можете преобразовать значение решётка, чем 127 в байты, как это не место для его хранения. Так как 140 в двоичном коде 10001100 означает, что вам нужен тип, который хранится до 8 бит. Байт хранит 8 бит, но один из них зарезервирован для знака. Таким образом, вы не можете вписаться в это. Вы можете использовать короткий магазин для ведьм 16 бит (15 и 1 для знака).

Ноль в разных типах, выраженный в двоичном формате;

byte b = 0b000_0000; 
short s = 0b000_0000_0000_0000; 
int i = 0b000_0000_0000_0000_0000_0000_0000_0000; 

Если вы пытаетесь объявить что-то вроде:

byte b = 0b1000_1100; 

компилятор высокий вы Type mismatch: cannot convert from int to byte.

Смежные вопросы