关于int转换成byte溢码

/*
因为Java中byte是用8位来存储,只能表示-128~127之间的数,当由int强制类型转化为byte时,系统就采取了截取int后8位的做法。
那么130在内存中的表示形式:00000000 00000000 00000000 10000010
这样截取后8位就变成10000010,补码表示的时候第一位是符号位,0正1负,
所以可以知道10000010肯定是一个负数了,再来看它的数值部分,
补码由正数变负数,还是正数变负,方法:“按位取反,再加1”,
 所以0000010应该变为1111101 + 1 = 1111110(即126)
又因为是负数,所以就截取变成-126了

把byte还原成int时和0xff做‘与运算’((byte)192&0xff)
如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。 

而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。
*/

 

你可能感兴趣的:(关于int转换成byte溢码)