数电:原码反码补码以及运算中的位宽问题

Posted xianyufpga

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数电:原码反码补码以及运算中的位宽问题相关的知识,希望对你有一定的参考价值。

一、基本概念
1、原码:人类阅读
  符号位为 0 表示正数,为 1 表示负数,其余各位为绝对值。
2、反码:过渡而已
  符号位不变,其余位:是正数则不变,是负数则取反。 
3、补码:机器阅读
  符号位不变,其余位:是正数则不变,是负数则取反加一。
技术图片

 

二、计算问题

  原码好说,大不了化为10进制自己心算。

  补码运算,符号位也参与运算,该进位就进位。

技术图片

 

 

三、位宽问题
1. 固定用 8 位位宽表示原反补码
技术图片

 

2.用最少位宽表示原反补码(16 进制)
技术图片
 
3.用最高 8 位表示数的原反补码(16 进制),不足截掉低位
技术图片

 

4. 补码加减运算
技术图片

 

5. 有符号数 8’h12 的反码、补码、十进制分别是?
8’h12、8’h12、-18
 
6. 有符号数 8’hF1 的反码、补码、十进制分别是?
8’h8E、8’h8F、-71
 
7. 有符号数 8’hB8 的反码、补码、十进制分别是?
8’hC7、8’hC8、-71
 
8. 有符号数 8’h80 的反码、补码、十进制分别是?
8’hff、8’h80、-128
 
9. 有符号数 A = B * C * D * E,其中 BCDE 均为 3 位,那进行运算前 BCDE 输入位宽应该扩展为多少位?
9 位。3bit 真值绝对值最大值为-4,3bit * 3bit * 3bit 最大值 256,对应位宽为 10 位。
 
10. 有符号数 A = B * C + D ,其中 B 为 4 位,C 为 5 位,D 为 6 位,那进行运算前,BCD 输入位宽应该扩展为多少位?
9 位。4bit 真值绝对值最大值为 8,5bit 真值绝对值最大值为 16,6bit 真值绝对值最大值为 32,4bit*5bit+6bit 最大值为 160,对应位宽为 9 位。
 
11. 有符号数 A = B * C + D * E,其中 B 为 4 位,C 为 5 位,D 为 6 位,E 为 5 位,那进行运算前 BCD 输入位宽应该扩展为多少位?
11 位。4bit 真值绝对值最大值为 8,5bit 真值绝对值最大值为 16,6bit 真值绝对值最大值为 32,4bit*5bit+6bit*5bit 最大值为 160,对应位宽为 11 位。
 
12. 有符号数 A = B + C + D + E,其中 B 为 4 位,C 为 5 位,D 为 6 位,E 为 5 位,那进行运算前 BCD 输入位宽应该扩展为多少位?
4bit 真值绝对值最大值为 8,5bit 真值绝对值最大值为 16,6bit 真值绝对值最大值为 32,4bit+5bit+6bit+5bit 最大值为 72,对应位宽为 8 位。
 
13. 用补码计算 21 - 29,补码位宽是 8 位,计算结果用二进制补码表示是?
(21)补码 = 8’b0001_0101,(-29)补码 = 8’b1110_0011,因此结果是 8’b1111_1000。
 
14. 用补码计算-127-128,计算结果用 16 进制表示是?
1)预计结果所需要的最大位宽。-127-128= -255,(255) 二进制 = 8’b1111_1111,对应的位宽是8位,加上符号位是9位,预拓展位宽是9位。
2)拓展位宽。(-127)补码 = 9’b1_1000_0001,(-128) 补码 = 9’b11_1000_0000,
3)补码相加。9’b1_1000_0001 + 9’b1_1000_0000 = 10’ b111_ 0000 0001,结果保留9位,即最终结果是 9’b1_0000_0001,换算为16进制是16’h0101 。
 
15. 用补码计算 127+100,计算结果用 16 进制表示是?
1)预计结果所需要的最大位宽。127+100 = 227,(227) 二进制 = 8’b_1110_0011,对应的位宽是8位,加上符号位是9位,预拓展位宽是9位。
2)拓展位宽。(127)补码 = 9‘ b0_0111_1111, (100) 补码 = 9’b0_ 0110_0100,
3)补码相加。10’b0_0111_1111+10‘b0_0110_0100 = 10’b0_1110_0011, 换算为16进制是8’hE3。
 
16. 用补码计算-111-55,补码位宽是 8 位,计算结果用二进制补码表示是?
1)预计结果所需要的最大位宽。-111-55 = -166,(-166) 二进制 = 8’b_1010_0110,对应的位宽是8位,加上符号位是9位,预拓展位宽是 9 位。
2)拓展位宽。(-111) 补码 = 9’b1_1001_ 0001, (-55)补码 = 9’b1_1100_1001。
3)补码相加。9’b1_1001_ 0001 + 9’b1_1100_1001 = 10’b1_0101_1010 换算为16进制是16’h015A。
 
 

以上是关于数电:原码反码补码以及运算中的位宽问题的主要内容,如果未能解决你的问题,请参考以下文章

(转)java 原码反码补码计算 以及 取反运算,原码反码补码运算公式

(转)java 原码反码补码计算 以及 取反运算,原码反码补码运算公式

计算机基础:源码反码补码 位运算。盘点源码常见的位运算操作,祝您源码阅读更上一层楼。

正数和负数的原码反码补码及二进制位运算

数值的二进制与位运算

Java负数的位运算