知识点总结——原码反码补码

原码反码补码

  • 计算机中常见数据的分类
  • 机器数和机器数的真值
  • 原码
  • 反码
  • 补码
  • 扩展知识
    • 为什么需要反码和补码
    • 使用补码计算
    • 补码转原码

机器数

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

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

5->0000 0101

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

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

int->整数 4个字节 32 -2147483648—2147483647

-231—232-1

long->长整型8个字节64 一位符号63 -263-263-1

1000 0111=-7

真值

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

1000 0111=-7

0000 1111=15

1000 1010=-10

原码

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

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

​ 0000 1011

负数:符号位 有效位 -15->取绝对值 15->000 1111

​ 1000 1111

求原码:

34 00100010

-39 10100111

-55 10110111

反码

正数:正数的反码=原码

负数:符号位不变,其余各位逐一取反,只有两种状态[0,1] 1->0 0->1

-49

原码 10110001

补码 11001110

-36

原码 10100100

补码 11011011

补码

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

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

原码:11000001

反码:10111110

补码:10111111

10100101

11011010

11011011

11111000

10000111

10001000

扩展

为什么需要反码和补码?

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

5-3=5+(-3)

原码不可以直接计算的!

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

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

补码[高位溢出]

1=0000 0001[补]

-1=1111 1111[补]

0000 0001

1111 1111


0000 0000

使用补码计算

67-49

01000011

10110001

11001110

11001111

00010010

-33-23

10100001

11011110

11011111

10010111

11101000

11101001

11001000

将补码转原码

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

补码->原码

原则:补码的补码

把补码当原码,求补码

计算规则:符号位不变,其余取反,然后加1;

求-128的补码 为1000 0000[-128补]

一个字节,不可以表示-128的原码

1000 0000 1000 0000[-128的原码]

求反码

1111 1111 0111 1111

加一

1111 1111 1000 0000

1000 0000

你可能感兴趣的:(其他)