所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

为什么int类型的128转换成byte类型的会变成-128?

发布时间:2020-04-12 09:11:34

资讯分类:byte  int  转换成  128  补码  类型  正数
为什么int类型的128转换成byte类型的会变成-128?

这个涉及补码的知识。我先给你写出结论:正数的补码是本身的二进制表示,负数的补码=对应正数的二进制反码+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的原因。后面一个方法是一样的,不再赘述。

当然补码的知识不止于此,有兴趣可以在网上寻找有关资料。

留言与评论(共有 0 条评论)
   
验证码:
Top