P21 、1-Solidity Types - 整型(Integer) (一)
int/uint:变长的有符号或无符号整型。变量支持的步长以8递增,支持从uint8到uint256,以及int8到int256。需要注意的是,uint和int默认代表的是uint256和int256.
对于有符号整型中,1表示负数,0表示正数。
pragma solidity ^0.4.4;
//uint8 uint16 uint24 ..... uint256
//int8 int16 int24 .....int256
//int => int256 等价
//uint => uint256 等价
//int8 有符号 , +1, -1
//uint8 无符号 ,3,8,10
//int8 ->8位
//范围:1111 1111 ~ 0111 1111
//-(1+2+4+8+16+32+64) ~ +(1+2+4+8+16+32+64)
// -127 ~ +127 255
//uint8 ->8位
//范围:0000 0000 ~ 1111 1111
//0 ~ (1+2+4+8+16+32+64+128)
//0 ~ 255 255
contract Test{
uint8 _a;
function Test(uint8 a){
_a=a;
}
function setA(uint8 a){
_a=a;
}
function a() constant returns (uint8){
return _a;
}
}
对于uint 类型的变量_a,输入300,结果输出44(被截取了)
300:100101100
44: 101100
可以看出300前面的3位2进制(100)被截掉了,留下(101100),所以是44
P22 、2-Solidity Types - 整型(Integer) - Var遇到的坑(二)
pragma solidity ^0.4.4;
contract Test{
function testVar constant returns(uint8){
uint8 a=100;
var b=a;
return b;
}
function testVar1 constant returns(uint){
uint a;
//uint8 i 0~255
for(var i=0;i<255;i++)
{
a=i;
}
return a;
}
P23 、3-Solidity Types - 整型(Integer) - 比较运算符(三)
支持的运算符:
Solidity目前没有支持double/float,如果是7/2会得到3,即无条件舍去。但如果运算符是字面量,则不会截断(后面会进一步提到)。另外除0会抛异常,我们来看看下面的这个例子:
pragma solidity ^0.4.4;
contract Test{
uint a;
uint b;
function Test(){
a=100;
b=200;
}
//<= < == != >= >
function test1() constant returns(bool){
return a<=b;
}
function test2() constant returns(bool){
return a<b;
}
function test3() constant returns(bool){
return a==b;
}
function test4() constant returns(bool){
return a!=b;
}
function test5() constant returns(bool){
return a>=b;
}
function test6() constant returns(bool){
return a>b;
}
}
P24 、4-Solidity Types - 整型(Integer) - 与或非异或(四)
pragma solidity ^0.4.4;
contract Test{
uint8 a;
uint8 b;
function Test(){
a=5; // 0000 0101
b=8; // 0000 1000
}
//& | ^ ~
function test1() constant returns(uint8){
return a & b;//0
// 0000 0101
// 0000 1000
// 0000 0000
}
function test2() constant returns(uint8){
return a | b; //13
// 0000 0101
// 0000 1000
// 0000 1101
//1+4+8
}
function test3() constant returns(uint8){
return a ^ b; //13
// 0000 0101
// 0000 1000
// 0000 1101
//1+4+8
}
function test4() constant returns(uint8){
return ~a;
// 0000 0101
// 1111 1010
// 0+2+0+8+16+32+64+128 = 250
}
}
P25 、5-Solidity Types - 整型(Integer) - 加减乘除求余(五)
pragma solidity ^0.4.4;
contract Test{
int8 a;
int8 b;
function Test(){
a=5; // 0000 0101
b=8; // 0000 1000
}
// + - * /
function test1() constant returns(int8){
return a + b;
}
function test2() constant returns(int8){
return a - b;
}
function test3() constant returns(int8){
return a * b;
}
function test4() constant returns(int8){
return a/b;
}
}
P26 、6-Solidity Types - 整型(Integer) - 求幂,左移,右移(六)
pragma solidity ^0.4.4;
contract Test{
uint8 a;
function Test(){
a=8;
}
function test1(uint8 b) constant returns(uint8){
return a ** b; //a的b次方
}
function test2(uint8 b) constant returns(uint8){
return a << b;
// 0000 1000
// b = 2
// 0010 0000
// 32
}
function test3(uint8 b) constant returns(uint8){
return a >> b;
// 0000 1000
// b = 2
// 0000 0010
// 2
}
}
P27 、7-Solidity Types - 整型(Integer) - 字面量(七)
pragma solidity ^0.4.4;
contract Test{
function test1(uint8 b) constant returns(uint8){
uint8 a=2**800 - 2**800 + 5;
return a;
}
function test2(uint8 b) constant returns(uint){
uint8 a = 111111111111111111111111111111111 - 111111111111111111111111111111000;
return a;
}
}