关于java中类型转化运算 为什int型128转换成 byte型就成了-128了呢?

同问int型的-129怎么就变成了byte型的127了呢?... 同问int 型的-129怎么就变成了byte型的127了呢? 展开
 我来答
晶鱼小公举
2019-04-23 · 超过35用户采纳过TA的回答
知道答主
回答量:200
采纳率:62%
帮助的人:43.9万
展开全部
这个涉及补码的知识。我先给你写出结论:正数的补码是本身的二进制表示,负数的补码=对应正数的二进制反码+1(反码即二进制的所以位取反),并规定首位为符号位不表示值,0为正1为负。
说了这么一堆,有啥用呢?有!整数在计算机中就是以补码的形式存储的。
OK基础有了我们来看看这个问题。int 类型的128,没有问题,int存储边界远比比128大。而转化成byte类型,问题就来了。我们先来看int类型的128的二进制表示:0000-0000-0000-0000-0000-0000-1000-0000也就是它的补码
转化成byte类型表示为:
1000-0000
我们会发现这里首位需要表示为值!但是遗憾计算机不会自动识别造型时的期望值。1000-0000在计算机中是一个补码而并非一串正数二进制。我们对它取反得到0111-1111发现正是最大的byte类型值127,再加一得128,而首位为1,表示为负,即1000-0000表示的就是-128就是最小的byte值。
这也就是byte类型值介于-128~127的原因。后面一个方法是一样的,不再赘述。
当然补码的知识不止于此,有兴趣可以在网上寻找有关资料。
追答
另外补充一下负数反码那部分你可能有混淆。就拿原题
1000-0000这个补码,那么如何求它表示的数。我总结成如下:该负数的“绝对值”等于其反码0111-1111表示的数+1
而如何求一个负数的反码,如-1。
其对应正数补码为0000-0001
取反为1111-1110,再加一为1111-1111
反过来证明一下:1111-1111
取反0000-0000为0
加一为1
即这个负数绝对值为1,则这个负数为-1
张Ban仙儿
2019-04-23 · TA获得超过138个赞
知道小有建树答主
回答量:238
采纳率:55%
帮助的人:31.5万
展开全部
byte类型的取值范围是-128~127

所以int转换之后回丢掉多余的部分-129变成-128而128变成127
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AA彼岸花开99
2019-04-23 · 超过13用户采纳过TA的回答
知道答主
回答量:68
采纳率:63%
帮助的人:10.3万
展开全部
因为越界了。你可以看一下数据类型的范围就明白了。128这个数已经超过了byte的范围
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qqlxinye
2019-04-21 · TA获得超过1980个赞
知道大有可为答主
回答量:2257
采纳率:65%
帮助的人:531万
展开全部
int符号位太高,字节位太少,符号位被128赋值成1是负数
-128到127是一个字节全部的数。
追问
你好 可以讲的详细一点吗?
我有点不懂。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f6618dd
2019-04-21
知道答主
回答量:11
采纳率:16%
帮助的人:5.4万
展开全部

这个和编码过程有关

网页链接

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式