在java中将int分配给byte?

ram*_*mar 6 java

int val = 233;
byte b = (byte) val;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)

我有一个简单的例子:我有一个有一些值的整数,我想将该值转换为一个字节用于输出.但在这种情况下,负值即将来临.

如何成功将int值放入字节类型?

Dar*_*rov 14

在Java中,字节范围是-128到127.您不可能将整数233存储在一个字节中而不会溢出.


pol*_*nts 14

Java的byte是一个符号的8位数字类型,其范围是-128127(JLS 4.2.1).233超出这个范围; -23相反的位模式代表.

11101001 = 1 + 8 + 32 + 64 + 128 = 233 (int)
           1 + 8 + 32 + 64 - 128 = -23 (byte)
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你坚持int在一个字节中存储a的前8位,那么byteVariable = (byte) intVariable就这样做.如果需要将其强制转换为int,则必须屏蔽任何可能的符号扩展名(即intVariable = byteVariable & 0xFF;).


Pet*_*rey 8

您可以在一个字节中使用256个值,默认范围是-128到127,但它可以表示具有一些转换的任何256个值.在您的情况下,您需要做的就是遵循屏蔽位的建议.

int val =233; 
byte b = (byte)val; 
System.out.println(b & 0xFF); // prints 233.
Run Code Online (Sandbox Code Playgroud)


Ha.*_*Ha. 5

如果需要使用无符号值的字节b&0xFF.