原码补码反码详情

计算机中常见的数据分类


数据分类

机器数

数值在计算机中的二进制表示形式

注意:机器数是带有符号的,最高位是符号位,使用1表示正数,0表示负数。

5-》0000 0101

一个数据表示时,第一个位为符号位,剩余的为有效位

字16位 1位符号位 15有效数据位

int》整数 4个字节 32位 -231~231-1

long>长整形 8个字节 64位 -264~264-1

真值

机器数所对应的二进制的真正的数值

1000 0111=-7

0000 1111=15

原码

原码就是符号位加上真值的绝对值

正数:符号位 有效位 +11>000 1101

​ 0 0000 1101

负数;符号位 有效位 -15>000 1111

​ -1 1000 1111

求原码

34 0 010 0010

-39 1 010 0111

-55 1 011 0111

反码

正数的反码=原码 +9 0000 1001[原码]=0000 1001[反码]

负数:符号位不变,其余各位逐一取反,

  • -49
    • 1 011 0001
    • 1 100 1110
  • -36
    • 1 010 0100
    • 1 101 1011

补码

正数:正数的补码等于反码等于原码 如 +3 0000 0011[原]=0000 0011[反]=0000 0011[补]

负数:先求的反码,在反码的基础上加1

  • -7
    • 1000 0111 原
    • 1111 1000 反
    • 0000 0001
    • 1111 1001补
  • -65
    • 1100 0001原
    • 1011 1110反
    • 1011 1111补

拓展

在设计计算机时,只设计了加法器,没有设计减法器

5-3=5+(-3)

原码:

  • 5=0000 0101
  • -3=1000 0011
  • 相加后:1000 1000[原码]=-8

说明原码不可以直接进行计算

反码:解决了只设计加法器,使用加法器进行减法运算的问题

缺点:正负相加0的表示不唯一

  • 1-1=1+(-1)
    • 1=0000 0001原
    • 1=0000 0001反
    • -1=1000 0001原
    • -1=1111 1110反
    • 相加后:1111 1111反=1000 0000原=-0

补码(高位溢出)

1=0000 0001补

-1=1111 1111补

相加后:0000 0000=0 舍弃高位溢出1

将补码转原码

因为负数的补码不能直接读出结果,但原码可以,所有将补码转原码

原则:补码的补码

  • 把补码当原码求补码
    • 符号位不变其余取反,然后加1
    • -23补码 1110 1001
      • 1001 0110
      • 0000 0001
      • 1001 0111
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。