运算符号、算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符、位运算符、条件运算符、运算符优先级

目录

一、算术运算符

二、赋值运算符

三、比较(关系)运算符

四、逻辑运算符

五、位运算符

六、条件运算符

七、运算符优先级


运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。

运算符的分类:按照功能分为:算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符。

按照操作数的个数分为:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符(三目运算符)。

一、算术运算符

二、赋值运算符

基本语法:符号为:=

①:当‘=’两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理

②:支持连续赋值

扩展赋值运算符:+=、-=、*=、/=、%=

三、比较(关系)运算符

注意:

①:比较运算符的结果都是boolean型,也就是结果要么是true,要么是false

②:>、<、>=、<=只适用于基本数据类型(除boolean类型之外)

③:==、!=适用于基本数据类型和引用数据类型

④:比较运算符“==”不能误写成“=”

四、逻辑运算符

基本语法:

逻辑运算符,操作的都是boolean类型的变量或者常量,而且运算的结果也是boolean类型的值。

运算符说明:

①:&与&&:表示“且”的关系,当符号左右两边布尔值都是true时,结果才能为true,否则,为false

②:|和||:表示“或”的关系,当符号两边的布尔值有一边为true时,结果为true。当两边都为false时,结果为false

③:!:表示“非”的关系,当变量布尔值为true时,结果为flase。当变量布尔值为false时,结果为true

④:^:当符号左右两边的布尔值不同时,结果为true。当两边布尔值相同时,结果为false。理解:异或,追求的是“异”!

注意:

①:逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3&x<6

②:区分“&”和“&&”:

相同点::如果符号左边是true,则二者都执行符号右边的操作

不同点:对于&而言,如果符号左边是false,则继续执行符号右边的操作;对于&&而言,如果符号左边是false,则不再继续执行符号右边的操作。

建议:开发中,推荐使用&&

③:区分“|”和“||”:

相同点:如果符号左边是false,则二者都执行符号右边的操作

不同点:对于|而言,如果符号左边是true,则继续执行符号右边的操作,对于||而言,如果符号左边是true,则不再继续执行符号右边的操作

建议:开发中,推荐使用||

五、位运算符

位运算符的运算过程都是基于二进制的补码运算

①左移:<<

运算规则:在一定范围内,数据每向左移动一位,相当于原数据*2。(正数、负数都适用)

注意:当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位。

②右移:>>

运算规则:在一定范围内,数据每向右移动一位,相当于原数据/2。(正数、负数都适用)

注意:如果不能整除,向下取整

③:无符号右移:>>>

运算规则:往右移动后,左边空出来的位直接补0。(正数、负数都适用)

④:按位与:&

运算规则:对应位都是1才为1,否则为0

⑤:按位或:|

运算规则:对应位只要有1即为1,否则为0

⑥:按位异或:^

运算规则:对应位一个为1一个为0,才为1,否则为0

⑦:按位取反:~

运算规则:对应位为1,则结果为0;对应位为0,则结果为1

六、条件运算符

基本语法:

条件运算符格式:

(条件表达式)?表达式1:表达式2

说明:条件表达式是boolean类型的结果,根据boolean的值选择表达式1或表达式2

与if-else的转换关系:

凡是可以使用条件运算符的地方,都可以改写为if-else结构。反之,不成立。

开发中,如果二者都可以使用,推荐使用条件运算符,因为其执行效率较高

七、运算符优先级

运算符有不同的优先级,所谓优先级就是在表达式运算中的运算符顺序

上一行中的运算符总是优于下一行的

实际开发时候的建议:

①不要过多依赖运算的优先级来控制表达式的执行顺序,这样可读性太差,尽量使用()来控制表达式的执行顺序

②不要把一个表达式写得过于复杂,如果一个表达式过于复杂,则把它分成几步来完成

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Verilog 中,赋值运算符 "<=" 和关系运算符 "<=" 是不同的,虽然它们的符相同,但是它们的含义和用法不同。其中 "<=" 用于非阻塞赋值,而 "<=" 用于比较操作符,如小于等于。在 Verilog 中,"<=" 用于 always 块中,表示并行执行的赋值操作,而 "=" 表示顺序执行的赋值操作。这两种赋值操作符的区别在于执行赋值时的顺序不同。 例如,在 always 块中使用非阻塞赋值 "<=",则会在 always 块中赋值语句执行完后,同时执行赋值操作。而使用阻塞赋值 "=" 则表示顺序执行的赋值操作,即先执行一个赋值操作,再执行下一个赋值操作。因此,阻塞赋值会按照代码中的顺序进行赋值,而非阻塞赋值则是并行执行的,不会受到代码顺序的影响。 举个例子:假设有以下代码: ```verilog always@(posedge clk) begin a <= b; b <= c; end ``` 在这个代码中,当时钟上升沿到来时,a 会被赋值为 b 的值,而 b 则被赋值为 c 的值。如果使用阻塞赋值 "=",则会先执行 a 的赋值操作,再执行 b 的赋值操作。而如果使用非阻塞赋值 "<=",则 a 和 b 的赋值操作会同时进行,完全并行。 因此,在使用赋值操作符时需要根据实际需要选择合适的赋值方式,以确保设计的正确性。需要注意的是,非阻塞赋值 "<=" 在时序逻辑电路中使用较多,而阻塞赋值 "=" 在组合逻辑中使用较多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值