- 前言
- 一、概念
- 二、取值范围
前言
原码、反码、补码知识点的一些整理,如有错漏请提出
一、概念
原码、反码、补码是计算机语言的一种编码方式。原码即为数本身的二进制写法,最高位记为符号位,0代表正数,1代表负数。以4位有符号数为例,如+5:0101,-5:1101。
在计算正数相加时,我们可以直接将两数加起来,但在计算两数相减(正数+负数/负数相加)的情况时,计算机内部仍旧是以加法形式运行,原码就存在它的局限性。反码与补码便是用来解决这一问题的。
反码:正数反码=其原码,负数反码=其原码按位取反
补码:正数补码=其原码,负数补码=其反码+1
| +5 | -5 | |
|---|---|---|
| 原码 | 0101 | 1101 |
| 反码 | 0101 | 1010 |
| 补码 | 0101 | 1011 |
如上表所示,将+5与-5相加之和应为0,用原码相加得:0010(4位数,最高位舍去),用反码相加得:1111,仍旧不为0,而采用补码相加得到:0000,结果正确。
二、取值范围
4位无符号数的取值范围为0~15
4位有符号数的取值范围为-8~7
看到这个取值范围的时候,有一点不能够理解为什么会出现-8
罗列出4位有符号数的所有取值:0000,0001,0010,0011,0100,0101,0110,0111
1000,1001,1010,1011,1100,1101,1110,1111
正数可看出来为0-7,负数为1000和-1~-7,多出来一个1000,按照反码的写法来看1000应该为-0,但是在正数中已有了一个0,编码需要一一对应,因而规定1000为-8。



