Solidity-值类型(一)

文章目录


前言

写本文的目的是记录自己对于区块链技术的学习,方便日后查漏补缺,solidity是一门智能合约语言,是静态类型语言,支持继承等特性。solidity中不存在 undefinenull的概念,每个新声明的变量都会根据其类型赋予默认值。值类型(value types)之所以有此名称是因为他们总是通过值传递,当他们用作函数参数或者赋值时总是以拷贝的方式。


一、布尔类型;

1、可取字面量:

  • false
  • true

2、操作符:

  •  !    (非)
  • &&   (与)
  • ||      (或)
  • ==    (等于)
  • !=     (不等于)

&&和||遵循着相同的短路规则

二、整数类型

 1、整数有无符号整数(uint)和有符号整数(int)两种,int8-int256(int)\uint8-uint256(uint),以1个字节逐步递进。

2、运算符

  • 比较:<=、=>、==、!=、>、<。(返回值为bool尅性)
  • 位运算:&(与)、|(或)、^(异或)、~(按位取反)
  • 移位运算:<<(左移位)、>>(右移位)   (~int256(0)== int256(-1))
  • 算数运算符:+、-、*、/、%、**

对于整型type(uint\int).min、type(uint\int).max可以获取做大值最小值。

溢出攻击:在0.8版本之前,solidity不检查溢出,容易发生溢出攻击,所以编写时需要用Safemath库,0.8之后算术运算有两个模式一个是“wrapping”截断模式,不检查溢出。另一个是检查模式(默认),发生溢出时会发生Panic(assert)错误,evm会revert所有操作。通过unchecked {……} 可以强制使用wrappinng模式,禁用掉Panic错误(1、可以事先用require确认是否会溢出。2、除零会直接报Panic)。

3、 移位运算

移位操作的结果具有左操作数的类型,同时会截断结果以匹配类型。 右操作数必须是无符号类型。

移位可以通过用2的幂的乘法来 “模拟”,左操作数的截断总是在最后发生,但是不会明确提醒。

  • x << y 等于数学表达式 x*2**y
  • x >> y 等于数学表达式 x/2**y , 四舍五入到负无穷。

 在版本 0.5.0 之前,对于负 x 的右移 x >> y 相当于 x / 2 ** y ,会四舍五入到零,而不是向负无穷。

4、使用两进制补码表示数据

 有int x = type(int).min;  则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值