2.3 运算符

运算符分类

运算符分为算术运算符、逻辑运算符、关系运算符、移位运算符等。

类型

符号

功能说明

类型

符号

功能说明

算术运算符

+
-
-
*
/

二进制加
二进制减
2的补码
二进制乘
二进制除

关系运算符
(双目运算符)

>
<
>=
<=
==
!=

大于
小于
大于或等于
小于或等于
相等
不相等

位运算符
(双目运算符)

~
&
|
^
^~或~^

按位取反
按位与
按位或
按位异或
按位同或

缩位运算符
(单目运算符)

&
~&
|
~|
^
^~或~^

缩位与
缩位与非
缩位或
缩位或非
缩位异或
缩位同或

逻辑运算符
(双目运算符)

!
&&
||

逻辑非
逻辑与
逻辑或

移位运算符
(双目运算符)

>>
<<

右移
左移

位拼接运算符

{,}
{{}}

将多个操作数
拼接成为
一个操作数

条件运算符
(三目运算符)

?:

根据条件表达式
是否成立,
选择表达式

四值逻辑真伪判断

  1. 在逻辑运算符中,如果操作数是1位的,则用"1"表示逻辑真状态,用"0"表示逻辑假状态;

  2. 若操作数由多位组成,必须把操作数当做整体来处理,即如操作数所有位都是0,那么该操作数整体看做逻辑0,反之,只要其中一位为1,那么该操作数整体看做逻辑1;

  3. 如果任意一个操作数包含x,逻辑运算结果也为x。

    !x                      // 结果为x
    4'b1010 && 4'b1111     // 结果是1
    4'b0000 && 4'b1001     // 结果是0
    

四值逻辑算术运算

  1. 整数除法将截断所有小数部分,只取整数部分。如7/4结果为1;

  2. 模运算符将求出与第一个操作数符号相同的余数;

    7%4     // 结果为3
    -7%4    // 结果为-3
    
  3. 如果算术运算符的操作数中出现x或z,那么整个算术运算符的运算结果为x。

    4'b10x1 + 4'b0111   // 结果为不确定数 4'bxxxx
    
  4. 进行算术运算时,操作数的长度可能不一致,这时运算结果的长度由最长的操作数决定。但在赋值语句中,运算结果的长度由赋值目标长度决定。

四值逻辑关系运算

如果操作数的长度不同,那么长度短的操作数在高位添0补齐,如果操作数被比较位中出现x或z,那么结果为x。

4'b10x1 < 4'b1101   // 结果为x

四值逻辑比较

  1. ==!= 是把两个操作数的逻辑值做比较,由于操作数中某些位可能是x或z,所以比较结果也有可能是x。

  2. ===!==运算符是按位进行比较,即便在两个操作数中某些位出现了x或z,只要它们出现在相同的位,那么就认为两者是相同的,比较结果为1,反之为0,而不会出现结果为x的情况。其常用于case表达式的判别,所以又称为"case等式运算符"。

a = 4'b0010; 
b = 4'bx10; 
c = 4'bx101; 
d = 4'bx10;

a === b     // 结果为假,值为0,严格按位比较
a != d      // 结果为x
b == d      // 结果为x,因为操作数出现了x
b !== d     // 结果为0
b === d     // 结果为真,值为1,严格按位比较

位拼接运算符

  1. 作用是将两个或多个信号的某些位拼接起来成为一个新的操作数,进行运算操作

    // 设A=1'b1, B=2'b10, C=2'b00,则:
    {B,C}                   // 结果为4'b1000
    {A,B[1],C[0]}          // 结果为3'b110
    {A,B,C,3'b101}         // 结果为8'b11000101
    
  2. 对同一个操作数的重复拼接还可以用双重大括号构成的运算符{{ }}

    {4{A}}                 // 结果为4'b1111
    {2{A},2{B},C}          // 结果为8'b11101000
    

位运算符与缩位运算符的比较

假设:A=4'b1010,B=4'b1111

运算类型

~(取反)

&(与)

|(或)

^(异或)

~^(同或)

位运算

~A=4'b0101
~B=4'b0000

A&B=4'b1010

A|B=4'b1111

A^B=4'b0101

A~^B=4'b1010

缩位运算

&A=1&0&1&0=0

~&A=1
&B=1

|A=1
~|B=0

^A=0
^B=0

~^A=1
~^B=1

条件运算符

三目运算符,运算时根据条件表达式的值选择表达式。一般用法:

condition_expr ? expr1 : expr2;

首先计算第一个操作数condition_expr的值,如果结果为逻辑1,则选择第二个操作数expr1的值作为结果返回;若结果为逻辑0,选择第三个操作数expr2的值作为结果返回。

运算符的优先级

类型

符号

优先级

取反

! ~ -(求2的补码)

最高

算术

* /
+ -

移位

>> <<

关系

< <= > >=

等于

== !=

缩位

& ~&
^ ^~
| ~|

逻辑

&&
||

条件

?:

最低