查看: 28|回复: 0

[互联网的那点事] 兄弟连区块链学院-以太坊Solidity类型介绍+实战

发表于 2018-7-10 16:23:33
Solidity 语法的介绍会是一系列文章,本文是第一篇:介绍 Solidity 的变量类型。
本文前半部分是参考 Solidity0.4.20 版本官方文档(当前最新版本)进行翻译,然后是实际合约代码实例说明类型的使用。
类型
Solidity 是一种静态类型语言,意味着每个变量(本地或状态变量)需要在编译时指定变量的类型(或至少可以推倒出类型)。Solidity提供了一些基本类型可以用来组合成复杂类型。
Solidity 类型分为两类
§  值类型(Value Type) - 变量在赋值或传参是,总是进行值拷贝。
§  引用类型(Reference Types)
值类型(Value Type)
值类型包含:
§  布尔类型(Booleans)
§  整型(Integers)
§  定长浮点型(Fixed Point Numbers)
§  定长字节数组(Fixed-size byte arrays)
§  有理数和整型常量(Rational and IntegerLiterals)
§  字符串常量(String literals)
§  十六进制常量(Hexadecimal literals)
§  枚举(Enums)
§  函数(Function Types)
§  地址(Address)
§  地址常量(Address Literals)
布尔类型(Booleans)
布尔(bool):可能的取值为常量值true和false。
布尔类型支持的运算符有:
§  !逻辑非
§  && 逻辑与
§  || 逻辑或
§  == 等于
§  != 不等于
注意:运算符&&和||是短路运算符,如f(x)||g(y),当f(x)为真时,则不会继续执行g(y)。
整型(Integers)
int/uint: 表示有符号和无符号不同位数整数。支持关键字uint8 到 uint256 (以8步进),
uint 和 int 默认对应的是 uint256 和 int256。
支持的运算符:
§  比较运算符: <=, < , ==, !=, >=,> (返回布尔值:true 或 false)
§  位操作符: &,|,^(异或),~(位取反)
§  算术操作符:+,-,一元运算-,一元运算+,,/, %(取余数), \**(幂), << (左移位), >>(右移位)
说明:
1.    整数除法总是截断的,但如果运算符是字面量(字面量稍后讲),则不会截断。
2.    整数除0会抛异常。
3.    移位运算的结果的正负取决于操作符左边的数。x << y 和 x * 2\*y 是相等, x >> y 和 x / 2\y 是相等的。
4.    不能进行负移位,即操作符右边的数不可以为负数,否则会抛出运行时异常。
注意:Solidity中,右移位是和除等价的,因此右移位一个负数,向下取整时会为0,而不像其他语言里为无限负小数。
定长浮点型(Fixed Point Numbers)
注意:定长浮点型 Solidity(发文时)还不完全支持,它可以用来声明变量,但不可以用来赋值。
fixed/ufixed: 表示有符号和无符号的固定位浮点数。关键字为ufixedMxN 和 ufixedMxN。
M表示这个类型要占用的位数,以8步进,可为8到256位。
N表示小数点的个数,可为0到80之前
支持的运算符:
§  比较运算符: <=, < , ==, !=, >=,> (返回布尔值:true 或 false)
§  算术操作符:+,-,一元运算-,一元运算+,*,/, %(取余数)
注意:它和大多数语言的float和double不一样,M是表示整个数占用的固定位数,包含整数部分和小数部分。因此用一个小位数(M较小)来表示一个浮点数时,小数部分会几乎占用整个空间。

比特币没赶上!以太币没有买!你错过了成为了百万富翁的梦,但是不要错失成为创造者的机会,7月7日(周六)起每晚8点-9点半兄弟连区块链学院正式开课:http://www.ydma.cn/open/course/16【清华学霸携全球区块链大赛冠军团队】带你实战区块链开发!!!





回复

使用道具 举报