int转换为byte溢出怎么计算结果?如 int a=135 转换为 byte 要汉字描述
byte是1个字节 所以(字节型,占1 字节,表示8 位正整数,范围0 ~ 255) int是4个字节 而把int转换成byte会截取最后一个字节 比如你说的135 转为2进制应该有4个字节 然后仅仅要最后一个字节 最后一个字节的第一位被作为符号位135转换2进制后为10000111 然后按照 补码 计算规则看一下 把除了符号位之外 取反加1 变成11111001 这结果是-121
用256 减去 你所转换的数的绝对值 ,然后,加个符号(和做转换数相反的),就是结果????????
156 (int类型) 转byte为什么是-100
我算出来应该是-28 156=10011100B 转换为byte为11100B=-28
问题补充:
156=10011100B 最高位为符号位 而11100B=28 故为-28
156 =0 10011100B(第一个零位符号位,表示正,当然int型数值位前面还有N个0,略去) 由于1byte为8bit 所以转换为byte,符号位被丢弃(N个0也被丢弃), 结果为1 0011100B(此时,第一位符号位为1,为负), 由于负数按补码存储,所以转换为byte之后的真值为1 1100100(由补码求原码,按位取反末位加1),即-100 ============== lz前面都算对了,就差最后由负数的补码求真值,因为负数按补码存储,所以最后一步很关键
Java中int转byte问题
如 byte c1 = 46; byte c2 = 95; byte c3 = (byte)(c1 + c2); System.out.println("c3=" + c3); 输出结果为什么是 负100 老师说是int4个字节byte是一个字节去掉三个字节,余下哪个字节是多少就是多少。可是哪三个字节是怎么去的呢
/* 95+46=141 (00000000 00000000 00000000 ) 10001101 128 8 4 1 byte Max is 127. the first "1" is mark,so "10001101" is Complement Code. get:01110010 =64 +32+ 16 +2=(-)114 at Subtraction 1 =-115 */其实不能说是去掉3个字节,只能说在读取数据的时候只读取了最低的一个字节里的数据而已,那另外的3个字节还在 ,只是没有读取里面的内容而已