【第三章】初识别solidity值类型

以下类型也称为值类型,因为这些类型的变量总是按值传递,即当它们用作函数参数或赋值时,它们总是被复制。

布尔值

 

bool: 可能的值是常数true和false。

运营商:

  • !(逻辑否定)
  • &&(逻辑连接,“和”)
  • ||(逻辑析取,“或”)
  • ==(平等)
  • !=(不等式)

运营商||并&&应用常见的短路规则。这意味着在表达式中,如果计算结果为,即使它可能有副作用,也不会被计算。f(x) || g(y)f(x)trueg(y)

 

整数

 

int/ uint:各种大小的有符号和无符号整数。关键字uint8to uint256(8无符号 8 到 256 位)和int8to int256。uint和分别是和int的别名。uint256int256

运营商:

  • 比较:<=, <, ==, !=, >=, >(计算为bool)
  • 位运算符:&, |, ^(按位异或),~(按位否定)
  • 移位运算符:(<<左移)、>>(右移)
  • 算术运算符:+, -, 一元-(仅适用于有符号整数), *, /, %(模), **(幂)

对于整数类型X,您可以使用type(X).min和type(X).max访问该类型可表示的最小值和最大值。

警告

Solidity 中的整数被限制在一定范围内。例如,使用uint32,这0取决于。对这些类型执行算术运算有两种模式:“包装”或“未检查”模式和“已检查”模式。默认情况下,算术始终是“检查”的,这意味着如果操作的结果超出类型的值范围,则调用将通过失败的断言恢复。您可以使用 切换到“未选中”模式。更多细节可以在关于 unchecked的部分中找到。2**32 - 1 unchecked { ... }

比较

比较的值是通过比较整数值获得的值。

位操作

对数字的二进制补码表示执行位运算。这意味着,例如.~int256(0) == int256(-1)

转移

移位操作的结果具有左操作数的类型,截断结果以匹配类型。右操作数必须是无符号类型,尝试按有符号类型移位会产生编译错误。

可以通过以下方式使用乘以 2 的幂来“模拟”移位。请注意,对左操作数类型的截断总是在最后执行,但没有明确提及。

  • x << y等价于数学表达式。x * 2**y

  • x >> y等价于数学表达式,向负无穷舍入。x / 2**y

警告

在该版本之前,负数0.5.0右移相当于向零舍入的数学表达式,即,使用向上舍入(向零)而不是向下舍入(向负无穷大)进行右移。x >> yxx / 2**y

笔记

移位操作永远不会像算术运算那样执行溢出检查。相反,结果总是被截断。

加法、减法和乘法

加法、减法和乘法具有通常的语义,在上溢和下溢方面有两种不同的模式:

默认情况下,检查所有算术是否不足或溢出,但可以使用unchecked block禁用此功能,从而导致算术包装。可以在该部分中找到更多详细信息。

该表达式-x等价于where is 的类型。它只能应用于签名类型。如果为负,则的值可以为正。二进制补码表示还有另一个警告:(T(0) - x)Tx-xx

如果有,则不适合正值范围。这意味着有效,并且在检查模式下使用表达式 将导致断言失败。int x = type(int).min;-xunchecked { assert(-x == x); }-x

分配

由于运算结果的类型始终是操作数之一的类型,因此整数除法始终产生整数。在 Solidity 中,除法向零舍入。这意味着.int256(-5) / int256(2) == int256(-2)

请注意,相比之下,文字除法会产生任意精度的小数值。

笔记

除以零会导致

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值