数字逻辑:重要基础知识点整理(不定时更新)

写在前面:最近发现之前学的好多东西都一知半解,一方面是时间久了,另一方面也是没有定期回顾。因此写下这篇博客来监督自己查缺补漏、时常温习一些数字逻辑的基础知识。之后也会写一些其他方面的知识。若内容有任何不对或存疑处,请务必在评论区指出,纠正我的知识误区,也避免误导阅读这篇博客的网友。非常感谢!

1 二进制的符号位、原码、反码、补码、位扩展

1.1 有符号数signed及其符号位S、无符号数unsigned

有符号数signed才有符号位S(S=0表示正数,S=1表示负数),N bit有符号整数的二进制编码方式包含1 bit符号位和N-1 bit真值域,能表示的范围为-2(N-1)到+(2(N-1)-1),共2N个(-0和+0的补码相同,可以算1个数,关于这一点后面1.2部分有具体讨论),如8-bit有符号整数能表示-128到+127,共256个。
无符号数unsigned没有符号位S,N bit无符号整数的全部机器字长均表示数值位,能表示的范围为0到2N-1,共2N个。
二者的相互转换在后面写,因为需要用到补码。

1.2 反码与补码

首先,原码即前面介绍的signed包含符号位S与真值域,unsigned均为数值位
在计算机内存中,正数与负数都是以补码的形式来表示的。
对于正数(这里unsigned当做正数对待),原码=反码=补码,如unsigned或signed 4’b0011的原码为0011,反码与补码也为0011。注意unsigned 4’b1100的反码与补码也为4’b1100,不过若没特别注明是unsigned,提到的反码和补码一般默认指的是signed整数
对于负数,反码为符号位S不变,真值域的各位按位取反;补码为反码加1。如4’b1100的原码为1100,反码为1011,补码为1100。

1.3 +0与-0

以字长为4-bit的计算机为例,+0的原码为0000,反码为0000,补码为0000(正数的三者相同);-0的原码为1000,反码为1111,补码为0000。可以看出,+0和-0的原码与反码不一样,但补码是相同的,即在计算机内存里的表示形式是相同的。或许这也是计算机内存用补码表示的一个原因吧,可以消除二者的区别 😃

1.4 位扩展

当两个二进制数进行运算时,数据宽度即位数应相等。若不相等,首先要进行位扩展补到相等。
二进制数的位扩展分为对原码、反码与补码的位扩展:
(1)对原码的位扩展:高位向左补0
(2)对反码的位扩展:高位向左补符号数S
(3)对补码的位扩展:高位向左补符号数S
以上是对整数的位扩展介绍,如果有小数,则位扩展规则如下:
(1)对原码的位扩展:低位向右补0
(2)对反码的位扩展:低位向右补符号数S
(3)对补码的位扩展:低位向右补0
小归纳:整数与小数的位扩展区别只在于补位方向不同(较好理解,十进制中3.14=00003.140000,往两头补)以及对补码的位扩展不同

1.6 signed与unsigned的相互转换

首先看被转化数的最高位,若MSB=0,则二者相同,无需改变;若MSB=1,则被转化数取补码即目标数。具体解释如下:
(1)unsigned转signed:若unsigned最高位=0,则signed<=unsigned;若unsigned最高位=1,则signed<=unsigned的补码
(2)signed转unsigned:若signed的符号位S=0,则unsigned<=signed;若符号位S=1,则unsigned<=signed的补码

2 算术移位和逻辑移位

算术移位n位的结果是原数值乘/除以2^n,逻辑移位只是实现空间上的平移。对无符号数unsigned进行算术移位和逻辑移位的结果是一样的,都是空出的位置上补0,不作具体讨论。以下是对有符号数signed的讨论:
首先强调一点,在verilog中,移位结果与被赋值数的位数(假设是N位)也有关,操作过程如下:
(1)原数值先通过二进制数的位扩展变成N位
(2)位扩展后的数值再进行移位运算

2.1 左移

__算术左移(<<<)__与__逻辑左移(<<)__相同,都是在右边空出的每一位都补0。以4’b1100即-4为例,"4’b1100 <<< 1"与"4’b1100 <<1"的结果赋值给4-bit signed,都得到4’b1000即-0;若赋值给5-bit signed,则得到5’b11000即-8。
左移n位的结果为原数值乘以(2^n mod 2^(N-1)),其中N为被赋值数的数据位宽,N-1即真值域位宽。

2.2 右移

算术右移(>>>):在左边空出来的每一位都补_操作数的符号S_,算术右移n位的结果为原数值除以2^n(不受被赋值数的位宽影响)。如"4’b1100 >>> 1"的结果赋值给4-bit signed,得到"4’b1110"即-2;赋值给5-bit signed,得到"5’b11110"也为-2。
逻辑右移(>>):在左边空出来的每一位都补0,忽略操作数的符号。如"4’b1100 >> 1"的结果赋值给4-bit signed,得到4’b0110即+6;赋值给5-bit signed,得到5’b01110即+14。

3 二进制的加法和乘法位数计算

加法和乘法运算过程和十进制类似。这里主要总结位数的计算:(假设M≥N)

1个M位和1个N位的二进制数相加,输出应定义为M+1位(即最多位数);
1个M位和1个N位的二进制数相乘,输出应定义为M+N位。

4 &和&&

& 有两种功能:按位与;逻辑与
&& 是短路与,若左边表达式为false,右边的直接短路不做运算。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IC Beginner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值