Назначение int для байта в Java? - PullRequest
6 голосов
/ 27 марта 2010
int val = 233;
byte b = (byte) val;
System.out.println(b);

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

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

Ответы [ 5 ]

14 голосов
/ 27 марта 2010

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;).

14 голосов
/ 27 марта 2010

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

8 голосов
/ 02 апреля 2010

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

int val =233; 
byte b = (byte)val; 
System.out.println(b & 0xFF); // prints 233.
5 голосов
/ 27 марта 2010

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

0 голосов
/ 31 августа 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...