有符号和无符号

有符号和无符号

 

1. 有符号和无符号
说到运算,我们首先介绍一下无符号和有符号数在数字电路的二进制表示方法,MSB(Most Significant Bit)代表最高位,LSB(Least Significant Bit)代表最低位。
在二进制运算里面,无符号数即所有bits位都代码实际的数据内容,dec代表十进制,计算公式:
Value(dec)=(2^MSB)*bit(MSB)+(2^MSB-1)*bit(MSB-1) +  ....+ (2^0)*bit0
有符号数通常会把MSB当作符号位,0代表正数,1代表负数,其余MSB-1 ~ 0 当作实际数据内容的补码,当符号位为0,实际值=补码值,当符号位为1,实际值=2^符号位bit位-补码值,计算公式:
Value(dec) = (MSB == 1'b0) ?
(2^MSB-1)*bit(MSB-1) +  ....+ (2^0)*bit0   :  
-1* ((2^MSB)*bit(MSB)- ((2^MSB-1)*bit(MSB-1) +  ....+ (2^0)*bit0))
以3bits的二进制数为例,示意分别代表有符号数和无符号数的值:

二进制                              十进制无符号数                                  十进制有符号数
bit2        bit1        bit0               
0        0        0        (2^2)*0+(2^1)*0+(2^0)*0 = 0                                   (2^1)*0+(2^0)*0 = 0
0        0        1        (2^2)*0+(2^1)*0+(2^0)*1 = 1                                        (2^1)*0+(2^0)*1 = 1
0        1        0        (2^2)*0+(2^1)*1+(2^0)*0 = 2                                        (2^1)*1+(2^0)*0 = 2
0        1        1        (2^2)*0+(2^1)*1+(2^0)*1 = 3                                   (2^1)*1+(2^0)*1 = 3
1        0        0        (2^2)*1+(2^1)*0+(2^0)*0 = 4                 -1*((2^2)*1-((2^1)*0+(2^0)*0)) = -4
1        0        1        (2^2)*1+(2^1)*0+(2^0)*1 = 5                 -1*((2^2)*1-((2^1)*0+(2^0)*1)) = -3
1        1        0        (2^2)*1+(2^1)*1+(2^0)*0 = 6                 -1*((2^2)*1-((2^1)*1+(2^0)*0)) = -2
1        1        1        (2^2)*1+(2^1)*1+(2^0)*1 = 7                 -1*((2^2)*1-((2^1)*1+(2^0)*1)) = -1

  

小结一下,对于一个3bits的二级制数,如果代表无符号数,则表示范围为0~7, 如果表示有符号数,则表示范围为-4~3,即对于相同位宽的二进制数据,如果是无符号数,则能够表示范围为0~(2^MSB)-1, 如果是有符号数,则范围为-2^(MSB-1) ~ (2^(MSB-1)) -1, 由此可见,无符号数的范围是非对称的,即最小的复数值绝对值不等于最大整数的绝对值。

 

posted @ 2023-03-04 17:15  大块头  阅读(227)  评论(0编辑  收藏  举报