/* 因为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溢码
猜你喜欢
转载自notebookdong.iteye.com/blog/2214937
今日推荐
周排行