原文链接:智能合约基础语言(三):Solidity变量类型:值类型(下)
一、目录
☛值类型和引用类型的区别
☛布尔类型(bool)
☛整型(int、uint)
☛定点型小数(fixed、ufixed)
☛地址类型(address)
☛定长字节数组(bytes1,bytes2,bytes3,...,bytes32)
☛有理数和整数字面量
☛地址字面量
☛字符串字面量
☛十六进制字面量(hex)
☛枚举类型(enum)
二、值类型和引用类型的区别
Solidity变量类型分为两大类——值类型、引用类型
值类型:变量的存储空间存的是变量的数据
引用类型:变量的存储空间存的是变量数据所在的存储空间的地址
注意:值传递和引用传递。值类型的变量,赋值是简单的值传递,即两个变量占有独立的存储区域。引用类型赋值传递的是变量的引用,即两个变量指向同一存储区域
三、值类型——布尔(bool)
bool: 只有两种值true和false(默认false)。
3.1 支持的运算符:
▪ ! 逻辑非
▪ && 逻辑与
▪ || 逻辑或
▪ == 等于
▪ != 不等于
3.2 实例
bool a = true; bool b = !a; // a == b -> false // a != b -> true // a || b -> true // a && b -> false
逻辑与(&&)和逻辑或(||)都遵循短路原则,即如果根据前一个表达式可以得到运算结果,则不会执行后面的表达式。
四、值类型——整型(int/uint)
▪ int(m):有符号整数
▪ uint(m):无符号整数
▪ m关键字取值为8~256步幅是8 ,表示在内存中2进制的位数,控制了整数的取值范围,不写默认为256。
▪ uint和int分别是uint256和int256的别名。
▪ m一定要是8的整数倍
4.1 操作
比较:<=,<,==,!=,>=,>(结果为bool)
位操作符:&,|,^(按位异或),~(按位取反)
算术运算符:+, - ,一元 - ,一元 +,*,/,%(取余),**(幂),<<(左移),>>(右移)
注意:
▪ 除法总是截断,但如果两个运算符都是常量(或常量表达式),则它不会截断。
▪ 除零和取余有零引发异常。
▪ 左移几位和右移几位相当于乘以或者除以2的几次方,如果参数为负数的话会引发异常。
▪ 在Solidity中不支持八进制。
五、值类型——定点数
5.1 定点小数
到现在为止还没有被solidity完全支持,可以被声明,不能被赋值也不能用定点数赋值fixed/ufixed 各种大小的有符号和无符号定点小数,ufixedMxN and fixedMxN关键字M代表定点数占用的二进制位数,N代表定点数能表示多少位小数,M必须是8-256之间的,以8为步幅的整数,N必须是0-80之间的整数,ufixed 和fixed 默认为ufixed128x18和fixed128x18。
▪ 比较运算: