原码,补码&反码


以下皆以C++char的存储(8位二进制位存储)
  • 原码
    原码=符号位+值
    e.g.:
8的原码=00001000;
-8的原码=10001000;

  • 反码
    ~baike:~
    反码通常是用来由原码求补码或者由补码求原码的过渡码!
    反码=二进制位对每一位取反
8的反码=11110111;
-8的反码=01110111;

  • 补码
    baike:
    假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12).在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。若用一般公式可表示为:a-b=a-b+mod=a+mod-b。对“模”而言,2和10互为补数。实际上,以12为模的系统中,11和1,8和4,9和3,7和5,6和6都有这个特性,共同的特点是两者相加等于模。对于计算机,其概念和方法完全一样。n位计算机,设n=8,所能表示的最大数是11111111,若再加1成100000000(9位),但因只有8位,最高位1自然丢失。又回到了 00000000,所以8位二进制系统的模为 。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码

  1. 正数
    补码=原码;
  2. 负数
    补码=相反数的反码+1;
    3.0
    补码=0;
8的补码=00001000;
-8的补码=11110111+1=11111000;

参考资料:
反码_百度百科
补码_百度百科
原码_百度百科

最后修改:2023 年 07 月 27 日
如果觉得我的文章对你有用,请随意赞赏