黑马程序员技术交流社区
标题:
why计算byte b = (byte) 300;时不需要考虑补码问题??
[打印本页]
作者:
艾斯空气
时间:
2016-2-29 18:20
标题:
why计算byte b = (byte) 300;时不需要考虑补码问题??
为什么计算byte a = (byte) 130;的时候需要考虑补码 反码 原码问题,而计算byte b = (byte) 300;时则不需要?
byte a = (byte) 130; -126
byte b = (byte) 300; 44
作者:
艾斯空气
时间:
2016-2-29 18:45
byte a = (byte) 130;
http://bbs.itheima.com/thread-195576-1-1.html
byte b = (byte) 300;
http://www.zybang.com/question/c4e41f698a886d67ab1433519dbd4300.html
这两种做法不是太矛盾了吗!!!
作者:
18103958222
时间:
2016-2-29 20:34
数据130默认是int类型的十进制数据
第一步十进制的130转换成二进制数据
1 0 0 0 0 0 1 0
第二步130是int类型是占4个字节的,所以在内存的表现形式是
00000000 00000000 00000000 10000010
byte类型站一个字节 所以前边三个字节丢失(也就是报错经常出现的损失精度)
做了截取后的结果为
10000010
通过观察最高位符号位是1,这是一个负数,因为在计算机中所有的数据都是以补码的形式出现的所以要算它的补码
原码:1 0000010 原码变反码,最高位符号位不变,其他数值位1变0,0变1得反码
反码:1 1111101 反码变补码就是反码加1得
补码;1 1111110
最终的看到的结果就是
1 1111110最高为是符号位不运算,数值为转化为十进制是64+32+16+8+4+2=126符号位负
所以为-126
300的转换成二进制是 00000000 00000000 00000001 00110000
截取后是 00110000
注意最高位是0 是正数 所以原,反,补 都是一样的。(不是不考虑主要是就是因为他截取后是一个正数)
希望能帮助你。不行的话请追问
作者:
艾斯空气
时间:
2016-2-29 22:39
18103958222 发表于 2016-2-29 20:34
数据130默认是int类型的十进制数据
第一步十进制的130转换成二进制数据
1 0 0 0 0 0 1 0
谢谢。明白了。
计算机中所有的数据都是以补码的形式出现的,
我们所得出的130的二进制码就是一个原码,计算机要显示出数据 计算机就会先算出它的补码,
然后再得出数值。 是这样吧?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2