2010-03-27 2 views
6
int val = 233; 
byte b = (byte) val; 
System.out.println(b); 

У меня есть простой случай: у меня есть одно целое с некоторым значением & Я хочу преобразовать это значение в байт для вывода. Но в этом случае приходит отрицательное значение.Назначение int байту в java?

Как я могу успешно присвоить значение int байтовому типу?

+1

К сожалению, байты в Java подписаны. Все, что вы можете сделать, это попробовать более крупный тип данных или собственный класс. – missingfaktor

+0

@ user303218: каков диапазон значений val? 0-255? – Roman

+0

@Rahul, почему подписаны байты «неудачные»? –

ответ

14

В Java byte диапазон от -128 до 127. Вы не можете хранить целое число 233 в байте без переполнения.

+1

Вернее - вы можете, но вы переполняете байт. –

14

в Java byte является знаковым 8-разрядным числовым типом, чей диапазон -128 в 127 (JLS 4.2.1). 233 находится за пределами этого диапазона; тот же шаблон бита представляет собой -23.

11101001 = 1 + 8 + 32 + 64 + 128 = 233 (int) 
      1 + 8 + 32 + 64 - 128 = -23 (byte) 

Тем не менее, если вы настаиваете на хранение первые 8 битов в int в байте, то byteVariable = (byte) intVariable это делает. Если вам нужно отбросить это обратно до int, вам нужно замаскировать любое возможное расширение знака (то есть intVariable = byteVariable & 0xFF;).

5

Если вам нужно значение без знака байта, используйте b&0xFF.

8

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

int val =233; 
byte b = (byte)val; 
System.out.println(b & 0xFF); // prints 233. 
0

Поскольку байт подписан на природе, он может хранить -128 до 127 диапазона значений. После приведения типов допускается сохранение значений, даже превышающих заданный диапазон, но цикличность определенного диапазона происходит следующим образом. cycling nature of range

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