前言:
- 所有信息在机器上都是以 0、1 的方式进行存储的。
- 原码、反码、补码事机器存储的一个具体数字的编码方式。
原码:
如果机器字长为 n,那么一个数的原码就是用一个 n 位的二进制数,其中最高位为符号位:正数为 0,负数为 1。剩下的 n-1 位表示概数的绝对值。一个字节(byte)由 8 个比特(bit)构成。如果位数不够可在符号位后进行补全;
X=+00 0001 , [X]原= 0000 0001
X=-00 00001, [X]原= 1000 0001
位数不够的用 0 补全。
反码:
反码:很好理解,就是原来的数据位上的数取反,但要注意,正数不变,仅负数取反,注意只是数据位哦。
为什么有了原码还要有反码的出现呢?
场景: 1-1=0 =》1+(-1)=0
计算机设计之初为了尽量把逻辑电路简单化,机器只有两个数的加操作,而没有减操作,那么机器是如何计算两数相减的呢,答案是根据二进制左边第一位的符号位,计算机将符号位也纳入计算范围内:
用原码进行计算:
1-1=1+(-1)=[0000 0001] + [1000 0001] = [1000 0010] = -2(因为左边第一位为符号为),所以加入机器用原码进行减法计算时就会出错。
X=00 0001 , [X]原= 0000 0001 ,[X]反= 0000 0001
X=-00 0001 , [X]原= 1000 0001 ,[X]反= 1111 1110
补码:
补码:同样很好理解,正数的补码等于原码等于反码,负数的补码等于负数的反码 +1
X=00 0001 , [X]原= 0000 0001 ,[X]反=0000 0001,[X]补=0000 0001
X=-00 0001 , [X]原= 1000 0001 ,[X]反=1111 1110,[X]补=1111 1111
0 的补码是唯一的,如果机器字长为 8 那么[0]补=00000000。
移码:
移码:补码的符号位取反。
X=00 0001 , [X]原= 0000 0001 ,[X]反=0000 0001,[X]补=0000 0001,[X]移=1000 0001
X=-00 0001 , [X]原= 1000 0001 ,[X]反=1111 1110,[X]补=1111 1111,[X]移=0111 111
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于