2021年7月14日
正在公司上班(机械画图狗浑水摸鱼中),突然想到了一个问题。
为什么byte的取值范围为[-2∧7,2∧7-1],相信很多刚入门的初学者和我一样,存在这个问题,可能想的是取值范围为[-127,127],当然这是一个很有趣的问题,我和大家来说一下自己的观点。
是这样的,一个byte有一个字节,也就是八位二进制数,而二进制中第一位代表的是符号,最重要的一点是,计算机是以补码的形式存储数据的。
正数原码的反码和补码都是一样的,所以
0111 1111的补码也是0111 1111,最大值即为127。
而负数不一样了,负数是原码的符号位以后取反,然后再+1,例如1000 0001的反码为
1111 1110,+1为1111 1111。那为什么最小值要取-128呢,是因为还存在一个1000 0000(-0),这个数是没有任何意义的,不能够取反码,但是计算机将其规定为-128,也就是说,其符号位和数值位都是一样的。
二进制原码对我们人来说,是很能够直观的表达意思的,但是有个弊病,在计算机的语言中直接利用二进制运算的话,结果是不准确的,所以聪明的人们想到了利用原码的补码进行计算,然后再取原码,可以完成准确的运算,这也是数学独有的魅力吧。
2021-07-14
最新推荐文章于 2021-08-10 20:29:07 发布