2016-09-21 82 views
1

我发现这个解决方案在计算器上一个字节转换成char类型:Java的字节转换为char - 转换问题

byte b = 65; 
char c = (char)(b & 0xFF); 

什么,我不明白的是按位和使用0xFF。上面和这个有什么不同?

byte b = 65; 
char c = (char)b; 

有人可以一步一步向我解释什么是转换为什么类型?

+4

复制http://stackoverflow.com/questions/17912640/byte-and-char-conversion-in-java –

回答

1

“& 0xff”通常用于Java中,以切断从字节到大整数类型的隐式转换的符号扩展名。

在Java中,byte是一个有符号数据类型,其中值使用二进制补码存储,所以-1表示为0xff。 -1的对应int表示是0xffffffff。因此,当从一个字节转换为一个整数时,所有附加的前导位将从该字节的最高位填充。

按位并且不需要高达0x7f的字节值。但是如果你想转换一个例如一个非中断空间(代码点160/0xa0),它将符号扩展到0xffa0,这是一个不同于预期的char值0x00a0的字符。

+1

我认为扔掉我的东西是0xFF是一个int而不是一个字节。 –