solidity是一个静态类型的语言。也就是说每一个变量在申明的时候需要指定它的数据类型。
Solidity提供几个基本类型组合成复杂类型。
值类型
布尔类型
布尔:可能的常量值 是 真或假
操作符:
-
!(逻辑非)
-
&&(逻辑与,“and")
-
|| (逻辑或,”or“)
-
==(相等)
-
!=(不等)
-
操作符||和&&可以应用常规短路规则,即 表达式 f(x) || g(y), 如果f(x) 已是真,g(y)将不用计算,即使它有副作用 (真||任意值 均为真,假&&任意布尔值 均为假)。
整型
int 和 uint分别是有符号和无符号的整数,关键字uint8 到 uint256 步长8 (从8到256位的无符号整数 )
uint 和 int 分别是 uint256 和 int256的别名
有符号整数和无符号整数
https://baike.baidu.com/item/%E6%97%A0%E7%AC%A6%E5%8F%B7%E6%95%B4%E5%9E%8B/6717424?fr=aladdin
https://wenku.baidu.com/view/4ec21b2969dc5022aaea00d4.html
操作符:
-
比较 : <=,<,==,!=,>=,> (计算布尔量)
-
位操作符: &,|,^(位异或),~(位取反)
-
算术操作符:+,-,一元-,一元+,,/,%(取余数),*(幂次方)
地址
以太坊中的地址的长度为20字节,一字节等于8位,一共160位,所以address其实亦可以用uint160来声明
操作符:
- <=, <, ==, !=, >= 和 >
地址成员:
- 账户余额(balance)和发送(send)
若查询到有资产余额的地址,然后发送 Ether(以wei为单位) 到send 函数的地址上
address x = 0x123;
address myAddress = this;
if (x.balance < 10 && myAddress.balance >= 10) x.send(10);
整型
整型常量是特定精度整数,它们也可以和非常量同时使用。例如, var x = 1 - 2; 1 - 2的值是-1,然后赋值给x, 这时x接收类型为int8——最小的类型,其中包含-1, 虽然1和2的类型实际上是uint8。
有时最大超过256位的整型常量也可用于计算:var x =(0 xffffffffffffffffffff 0 xffffffffffffffffffff) 0;这里,x的值是0,它的类型是uint8类型。
字符串
字符串可以通过""或者''来表示字符串的值,Solidity中的string字符串不像C语言一样以\0结束,比如"hello"这个字符串的长度就为我们所看见的字母的个数,它的长度为5
pragma solidity ^0.4.4;
contract StringLiterals{
string _name; // 状态变量
//构造函数
function StringLiterals() {
_name = "hello";
}
// set方法
function setString(string name) {
_name = name;
}
// get方法
function name() constant returns (string) {
return _name;
}
}
注意:string字符串不能通过length方法获取其长度。
枚举
ActionChoices其实就是一个自定义的整型,当枚举数不够多时,它默认的类型为uint8,当枚举数足够多时,它会自动变成uint16,下面的GoLeft == 0,GoRight == 1, GoStraight == 2, SitStill == 3。在setGoStraight方法中,我们传入的参数的值可以是0 - 3当传入的值超出这个范围时,就会中断报错。
pragma solidity ^0.4.16;
contract test {
enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }
ActionChoices choice;
ActionChoices constant defaultChoice = ActionChoices.GoStraight;
function setGoStraight() public {
choice = ActionChoices.GoStraight;
}
function getChoice() public view returns (ActionChoices) {
return choice;
}
function getDefaultChoice() public pure returns (uint) {
return uint(defaultChoice);
}
}
网友评论