留言与评论(共有 0 条评论) |
发布时间:2020-04-12 09:11:34
这个涉及补码的知识。我先给你写出结论:正数的补码是本身的二进制表示,负数的补码=对应正数的二进制反码+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 条评论) |
全站搜索