运算符汇总
算数运算符
算数运算符与C语言没什么区别。
与C语言 不同的是,不是任何数都能相加的。比如12+7=19。12是一个4bit的数,7是一个3bit的数,得到的结果是一个4bit的数,然而19至少是一个5bit的数,所以多的部分会被抛弃(低位保留)。
位运算符
区别逻辑值和一般数值,也同样区分逻辑运算符和位运算符。取逻辑结果的话,只有1bit;取位结果的话,会保持位的数量。
注意区分位与&和位或|。
异或非就是同或。
其中d的话与0或1进行位操作的话,结果可能存在x。
逻辑运算符
如果1与上x,不知道真假,所以结果是x。
关系运算符
主要区别是x参与的关系运算符。结果不确定的话就是x。
关注最后一个案例,0已经是最小的了,但是仿真器依旧会输出x,这是特殊对待的。
区分2-5和a-b,寄存器变量对负数的操作是取补码,最后display会是一个正数(当作无符号数处理),但直接用数字输出的话,就是一个普通的负数。
相等运算符
全等与非全等把x和z单独对待,看作一个数值。
关注d,如果x前面没有数的话,会是xx10。
逻辑移位运算符
与C语言类似,不过有承载位数的区别。是一个线性移位,不是环形移位。就是说,多出来的空位用0填充。
第一行第三列,1缺省显示的话是一个32位十进制。
算数位移运算符
连接与复制操作
本质上将各位拆散连接在一块。
除了连接,还可以用于复制,通过两个花括号实现。
注意:要复制的个数是一个常数,在编译的时候就实现了。
这里c是一个从5到0由高位到低位的数,所以101001的5对应1,4对应0,以此类推。
如果reg[0:5]c,那么0对应1,以此类推。
这里可以通过c[n:m]来进行取位操作。
规约/缩减运算符
区别于位运算符,这是一个单目运算符,最后肯定会缩减为1bit的数。而位运算符是一个双目运算符,结果也会保持位数不变。
条件运算符
与C语言大致一样,但如果第一个操作数是x,那么结果是不定的。
如果能取z的操作数的位置只能是IO口。第一个操作数是x或z的情况不多。