3个回答
展开全部
程序要尽量避免溢出,这是原则,一旦溢出,再去研究值是什么已经没有意义。
以下大概给你说明一下:
一个字节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
其中具体是截断前面还是后面,是根据编译工具和版本来决定的,不同的语言可能会有不同的定义。
这样说你大概可以明白了吧?
以下大概给你说明一下:
一个字节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
其中具体是截断前面还是后面,是根据编译工具和版本来决定的,不同的语言可能会有不同的定义。
这样说你大概可以明白了吧?
追问
byte类型为-128—127,129超出范围了,如何截取保留?
追答
和我刚才说的那样,先换算成2进制,然后加1再看剩下的数据是什么样,一般会从小的部分(右边)截取。byte -128~127,那么byte第一位用来做正负号的标识位,值为1时为负,为0时为正。
那么127时,数据为 0111 1111,加2即129时,值为1000 0001,如果前面的推断都没有错,那么值应该为 -1,我不能确定,因为我不清楚java是怎么计算溢出数据的。
-------------------------------------------------
OK,我查了一下,java byte型溢出后又回到最小值,即-128
于是上面的问题,127+2=-127
即127+1为-128,再+1为-127
展开全部
short,byte转int都是补零拉长,反过来,int转byte时,取低八位,其余丢掉.129转换为byte时为1000 0001,为补码形式,转为原码-127.
追问
10000001怎么转为源码-127的
追答
取反加一,符号位不变。10000001-》11111110-》11111111,即-127.
计算机中计算都是采用补码计算的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
引用pensiero的回答:
程序要尽量避免溢出,这是原则,一旦溢出,再去研究值是什么已经没有意义。
以下大概给你说明一下:
一个字节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
其中具体是截断前面还是后面,是根据编译工具和版本来决定的,不同的语言可能会有不同的定义。
这样说你大概可以明白了吧?
程序要尽量避免溢出,这是原则,一旦溢出,再去研究值是什么已经没有意义。
以下大概给你说明一下:
一个字节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
其中具体是截断前面还是后面,是根据编译工具和版本来决定的,不同的语言可能会有不同的定义。
这样说你大概可以明白了吧?
展开全部
计算机运行的是补码,也就是上文中得出的1000 0001是补码,计算机运行时再转换成原码就是1111 1111,即-127.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询