在Java中int转byte类型,超出byte的范围该如何计算,答案尽可能详细

例如:129转化为byte该怎么转化... 例如:129转化为byte该怎么转化 展开
 我来答
pensiero
推荐于2017-09-10 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6921
采纳率:83%
帮助的人:1270万
展开全部
程序要尽量避免溢出,这是原则,一旦溢出,再去研究值是什么已经没有意义。
以下大概给你说明一下:
一个字节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
xuxingxingvip
2015-03-13 · TA获得超过252个赞
知道小有建树答主
回答量:372
采纳率:70%
帮助的人:124万
展开全部
short,byte转int都是补零拉长,反过来,int转byte时,取低八位,其余丢掉.129转换为byte时为1000 0001,为补码形式,转为原码-127.
追问
10000001怎么转为源码-127的
追答
取反加一,符号位不变。10000001-》11111110-》11111111,即-127.
计算机中计算都是采用补码计算的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在高椅古村看高达的辰砂
2018-03-19
知道答主
回答量:1
采纳率:0%
帮助的人:891
引用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

其中具体是截断前面还是后面,是根据编译工具和版本来决定的,不同的语言可能会有不同的定义。

这样说你大概可以明白了吧?
展开全部
计算机运行的是补码,也就是上文中得出的1000 0001是补码,计算机运行时再转换成原码就是1111 1111,即-127.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式