提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、带符号数是什么?
- 为什么要引入带符号数:在数制转换中整数和小数部分不太一样,类似的,正负数编码方式不同,所以需要规定带符号数(Signed Binary Numbers)
- 编码规则:最高位为符号位,0为正,1为负,其余位为数值位
- 范围:二进制正负数的一般定点(浮点有其他方法)方法
- 相关概念:代码位数为字长(bit),数值称为真值。
- 原码反码补码在符号位是相同的
- 正数的原码反码补码相同,主要是负数有区别
二、原码(true form)
- 表示方法:符号加数值
- 正负数的原码表示方法相同
三、反码(一补数)(1 s’complement)
- 正数的一补同正数的原码
- 负数的一补符号位为1,数值按位取反
- 注意所要求的位数,表示时可能要在符号位后补一位0
四、补码(二补数)(2 s’complement)
- 补码是最常用的,原因有二。原因一:原码和一补表示时会有+0和-0的两种表示,与数学中不一样;原因二:原码和一补计算时值会有问题
- 正数的二补与它的原码相同
- 负数的符号位为1,数值位计算:
- 方法一是“取反加一”。
- 第二种方法是2^n+N(N为负数时的补)
- 二补还原为原码的两种方法
- 再求补(补补为原)
- 减一取反
- 与前面两种编码的不同
- 二补没有-0
- 二补在负数上比原码多表示一个数,可以到-2^(n-1)
- 补码的计算
- 补码更适合带符号数的二进制数的计算
- 减法转换为+负数
- 减法是可能会进位,但是需要舍掉最高位保证位数不变(位数不超就可以)
- 加法时,可能会字长不够,需要补位
五、总结
- 注意字长(bits),过长需舍首位,短了需要补0
- 注意范围,二补因为只有一个0,在负数上比原码多表示一个数
- 注意是用带符号数去表示常用正负数,所以运算需要匹配,所有的规则都是为了运算匹配。例如0和1只是代表正负,不能在直接运算中起到正负号的效果,所以如有不匹配需要灵活变通。