整型类型通过int/uint关键字定义。对于int和uint可以显示设置占用空间大小,空间大小从8开始并且以8位步递增,最大到256位。
例如:
uint8 b;
int64 c;
uint248 e;
int/uint 默认表示的是uint256和int256,可以显示的声明256位整型。
int256 constant a=8
uint一般用来表示货币数据量(solidity中没有double和float)和日期(unix time),由于Solidity目前不支持double/float,如果是7/2会得到3,后面的小数会被截断。
货币
uint balance=1 ether;
时间
uint now = 1 hours;
不支持 double/float
uint x =7
uint y =2;
z等于3
var z = x/y
十六进制证书表示:
uint VERSION_ID = 0X123A1
整型常量需要通过constant修饰进行初始化的,常数一旦初始化就不可以修改了,这一点和其他的编程语言一样。
int constant a= 8
solidity中没有内置随机函数。可一通过合约实现随机数。
pragma solidity ^0.4.8
contract random{
function rand(uint min,uint max) public returns(uint){
uint256 lastBlockNumber = block.number-1;
uint256 hashVal - uin256(block.blockhash(lastBlockNumber));
return hashVal%(min+max)-min;
}
}
bool:可能的取值为常量true和fasle
bool b = true;
var b = true;//类型推断
以太坊中的地址为160位,即20字节大小,所以可以用一个uint160表示。
address public owner;
固定长度字节数组是以bytes加上数组后缀的方式定义。
如bytes2表示两个字节长度的字节数组。
数学后缀表示字节长度从1到32,以步长1递增。bytes1,bytes2,bytes3…bytes32 其中byte默认表示bytes1
byte a;//byte等同与bytes1
动态长度字节数组分两种
如果运算应用于不同类型时,编译器将尝试将其中一个操作数隐式转换为其他类型(对赋值也是如此)。
但是 int8不能转换成uint256(因为uint256不能拥有负数)
无符号证书可以转换为相同或者更大尺寸的字节类型。但是反过来则不可以转换。
任何可以转换为uint160类型的变量都可以转换为地址类型(address)
如果编译器不允许隐式转化,但是知道你正在做什么。那么有时候可以使用显示类型转换。
如果一个类型被显式转换为较小的类型,则高阶位会被截断
var在第一次赋值的时候会推断变量的类型,不可以用户函数的参数.使用小心,有时候var会推断出错误的类型
seconds,minutes,hours,days,weeks,years可以均为后缀,并进行相互转换,默认为seconds为单位
默认规则如下:
用时间日期计算,需要小心。因为每年不是365天,且不是每天都有24小时,因为还有闰秒。
对这些时间处理最好不要等于,优先小于或者大于
时间后缀不能用于变量。如果你想在变量中使用时间单位。
可以使用后缀wei,finney,szao或者ether来在不同货币单位中转换。
不含任何后缀的默认单位是wei
默认规则: