byte int互相转换的原理

866 阅读1分钟
*  int to byte
*  计算机存储数据是以补码的形式。
*  比如int 255的原码是24x0 11111111
*  由于正数的补码=原码,所以也是24x0 11111111
*  当其强转成byte,截取为8位,即为11111111
*  首位为符号位,补码为11111111
*  原码转换为补码为保留符号位,其他位取反,然后加1。
*  所以补码转换为原码即为,减1,保留符号位其他位取反。
*  即11111111的原码为10000001,即为-1。
*  所以(byte)255,为-1。
*
*  byte to int
*  依然拿255举例。
*  (byte)255的值为-1,所以强转为int,(int)(byte)255值不变,依然为-1
*  其补码为24个1 111111111
*  我们要将其转换为255,那么就要将11111111,作为无符号位转换。
*  顾要将int只保留低8位,顾将int与0xFF,因为0xFF是正数,所以其原码即为补码
*  为24个0 111111111,int与上0xFF将只会保留低8位,即为byte数值无符号位的值。
*  同样,其他byte无符号位的语言中,我们都可以将byte转成int保留低8位的结果,即为byte无符号位的值
*  这也为什么解释了,当我们使用类似,byte b=(byte)255的代码,传递byte给到byte范围是0-255的语言,处理结果是正确的。
*  因为int截取低8位,就是byte无符号位的数值。