程序要尽量避免溢出,这是原则,一旦溢出,再去研究值是什么已经没有意义。
以下大概给你说明一下:
一个字节byte长8位,也就是2的8次方,换成2进制后就是
00000000~11111111
取值范围就是那么多,10进制就是0~255。
如果更长的类型如int转成更短的类型,那么只保留短类型那么多长度的数据。
假设类型A为9位,其某变量值为
0 1111 1111 ,10进制为255,转成byte正好也是255
假设类型A变量值为
1 0000 0000 ,换算成10进制为256,转成byte为0
其中具体是截断前面还是后面,是根据编译工具和版本来决定的,不同的语言可能会有不同的定义。
这样说你大概可以明白了吧?
short,byte转int都是补零拉长,反过来,int转byte时,取低八位,其余丢掉.129转换为byte时为1000 0001,为补码形式,转为原码-127.
计算机运行的是补码,也就是上文中得出的1000 0001是补码,计算机运行时再转换成原码就是1111 1111,即-127.