【区块链安全 | 第二十篇】类型之运算符

在这里插入图片描述

运算符

算术和位运算符在两个操作数类型不同时也可以使用。我们可以编写表达式 y = x + z,其中 x 是 uint8 类型,而 z 是 uint32 类型。在这种情况下,会使用以下机制来确定运算的执行类型(这对是否发生溢出非常关键)以及运算结果的类型:

  • 如果右操作数的类型可以隐式转换为左操作数的类型,则采用左操作数的类型。

  • 如果左操作数的类型可以隐式转换为右操作数的类型,则采用右操作数的类型。

  • 否则,操作不被允许。

如果其中一个操作数是字面量数字,它首先会被转换为其“移动类型”,即足以容纳该值的最小类型(同位宽的无符号类型被认为比有符号类型更小)。如果两个操作数都是字面量数字,则运算将使用实际所需的无限精度进行计算,以确保在结果用于非字面量类型时不会丢失精度。

运算符的结果类型与实际执行运算的类型一致,而比较运算符的结果类型始终是 bool。

运算符 **(指数运算)、<< 和 >> 会使用左操作数的类型进行运算并返回结果。

三元运算符

三元运算符用于类似 <表达式> ? <真表达式> : <假表达式> 的表达式。根据主表达式的计算结果,仅执行 <真表达式> 或 <假表达式> 中的一个。如果 <表达式> 计算结果为真,则计算 <真表达式>;否则计算 <假表达式>。

三元运算符的结果类型不一定与其操作数类型一致,即使所有操作数都是有理数字面量。结果类型是根据两个备选表达式的类型共同确定的,并在需要时首先转换为它们的“移动类型”。

因此,表达式 255 + (tru

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秋说

感谢打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值