计算机内存对数字的存储方式——原码、反码、补码

来源:互联网 发布:ps游戏优化器 编辑:程序博客网 时间:2024/05/22 11:33
计算机在存储数字时,以最高位作为数值符号进行存储,0表示正数,1表示负数,同时,计算机的最小存储单位是8位

原码

所谓原码,就是将数值转化为二进制,如下将1、-1、0转为二进制

+1: 0000 0001-1: 1000 0001+0: 0000 0000-0: 1000 0000

如上,如果计算机使用原码进行存储数值,将会导致有两种0的结果。
此时计算1 - 1的结果:

// 以原码计算1 - 11 - 1 = 1 + (-1)+1: 0000 0001-1: 1000 0001    1000 0010  =>  -2

以上,发现以原码的方式存储除了会导致有两种0之外,连计算结果都不准确。因此,虽然原码更容易被人理解,但对于计算机来说,反而不好处理。

反码

反码是为了补码而产生的
  1. 先获取原码
  2. 正数的反码就是原码
  3. 负数的反码,是在原码的基础上,符号位不变,其他位取反

如下,求得+1、-1、+0、-0的反码

+1: 0000 0001   //正数的反码与原码相同-1: 1111 1110+0: 0000 0000-0: 1111 1111

如上,此时0依然有两种形式,此时计算1 - 1

// 以反码计算1 - 1+1: 0000 0001-1: 1111 1110    1111 1111  =>  -0

以上,发现以反码进行计算,计算结果正确,但是反码依然有缺陷,它还是有两种形式的0存在。

补码

获取原码
获取反码
正数的原码、反码、补码都是一致的
负数的补码,在反码的基础上+1

如下,求得+1、-1、+0、-0的补码

+1: 0000 0001-1: 1111 1111+0: 0000 0000-0:10000 0000  

如上,发现-0的补码为10000 0000,由于计算机的存储单位是8位,所以超过8位的高位部分将被丢弃,所以,真正的-0的补码为0000 0000,与+0是一致的!
所以,补码的方式解决了存在两种0的问题,下面再看看补码的情况下,计算结果是否正确

+1: 0000 0001-1: 1111 1111   10000 0000 => 丢弃高位,最终结果为0000 0000,即0

运算结果正确!

嗯。

阅读全文
0 0
原创粉丝点击