156 (int类型) 转byte为什么是-100

来源:百度知道 编辑:UC知道 时间:2024/06/14 22:59:45
我算出来应该是-28
156=10011100B 转换为byte为11100B=-28
156=10011100B 最高位为符号位 而11100B=28 故为-28

  1. 156 =0 10011100B,第一个零位符号位,表示正,当然int型数值位前面还有N个0,略去。由于1byte为8bit ,所以转换为byte,符号位被丢弃(N个0也被丢弃), 结果为1 0011100B,此时,第一位符号位为1,为负。 由于负数按补码存储,所以转换为byte之后的真值为1 1100100(由补码求原码,按位取反末位加1),即-100。

  2. int数据类型:在C语系编程语言(C、C++、C#、Java等)中,是一种整数数据类型定义的标示符。例如:int i;。

156 =0 10011100B(第一个零位符号位,表示正,当然int型数值位前面还有N个0,略去)
由于1byte为8bit
所以转换为byte,符号位被丢弃(N个0也被丢弃),
结果为1 0011100B(此时,第一位符号位为1,为负),
由于负数按补码存储,所以转换为byte之后的真值为1 1100100(由补码求原码,按位取反末位加1),即-100
==============
lz前面都算对了,就差最后由负数的补码求真值,因为负数按补码存储,所以最后一步很关键

byte:[-128,128-1];
所以:(byte)128=-128;
(byte)-129=127
也就是说,超出这个范围的数字的int转byte的算法为:
int i;
i>127时
(byte)i=(i-127-2)-127
i<-128时
(byte)i=(i+128)+128

156=10011100B 转换为byte为10011100B

1 byte 8字节啊