计算机中常见的数据分类
机器数
数值在计算机中的二进制表示形式
注意:机器数是带有符号的,最高位是符号位,使用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