一、Hello world
// SPDX-License-Identifier: MIT
//输入license的版本,MIT表公开的
// compiler version must be greater than or equal to 0.8.17 and less than 0.9.0
pragma solidity ^0.8.17; //也可以写成>0.8.13 <0.9.0
contract HelloWorld { //定义一个叫 HelloWorld的合约
string public greet = "Hello World!"; //greet为变量名
}
二、First Application
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Counter {
uint public count; //uint表示非负整数类型,初始值为0,可设置初始值
//加了public表示公开,外界可以读取count的值,相当于自建了个get函数
// Function to get the current count
function get() public view returns (uint) {
return count;
}
// Function to increment count by 1
function inc() public { //public是个修饰符,表示谁都可以访问,因为这个函数不需要返回值,所以不用写 view、returns
count += 1;
}
// Function to decrement count by 1
function dec() public {
// This function will fail if count = 0
count -= 1;
}
}
三、Primitive Data Types
solidity原生数据类型:boolean、uint256、int256、address
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Primitives {
bool public boo = true;
/*
uint代表无符号整数,表示非负整数,有不同范围可供选择
uint8的范围从0到2**8-1
uint16的范围从0到2**16-1
uint256的范围从0到2**256-1
*/
uint8 public u8 = 1;
uint public u256 = 456;
uint public u = 123; // uint默认是uint256
/*
int类型允许使用负数
与uint一样,从int8到int256有不同的范围
int256的范围从-2**255到2**255-1
int128的范围从-2**127到2**127-1
int8的范围从-2**7到2**7-1
*/
int8 public i8 = -1;
int public i256 = 456;
int public i = -123; // int默认是int256
// minimum and maximum of int
int public minInt = type(int).min;
int public maxInt = type(int).max;
address public addr = 0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c; //address钱包地址
/*
solidity具有多种字节数据类型
固定大小字节数组数据类型的范围为bytes1~bytes32,默认值为0x00
不定长字节数组类型声明为bytes,默认值为"",(0x)
bytes1 后面数字1是表示1字节
bytes2 后面数字2是表示2字节
bytes3 后面数字3是表示3字节
bytes4 后面数字4是表示4字节
*/
bytes1 public a = 0xb5; // [10110101] 就是16进制转2进制
bytes1 public b; // [00000000]
// 默认值,未分配值的变量具有默认值
bool public defaultBoo; // false
uint public defaultUint; // 0
int public defaultInt; // 0
address public defaultAddr; // 0x0000000000000000000000000000000000000000
}
进制转换
二进制转十进制规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
0b1011=1*2^0+1*2^1+0*2^2+1*2^3=11
八进制转十进制:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
0234=4*8^0+3*8^1+2*8^2=156
十六进制转十进制规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
0X23A=10*16^0+3*16^1+2*16^2=570
十进制转二进制规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制
158=158/2=79……0、79/2=39……1、39/2=19……1、19/2=9……1、9/2=4……1、4/2=2……0、2/2=1……0;所以158=ob10011110
十进制转八进制规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制
131=131/8=16……3、16/8=2……0;所以131=0203
十进制转十六进制规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制
237=237/16=14……13;所以237=0XED
二进制转八进制规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可
0b11010110=011、010、110=3、2、6=0326
二进制转十六进制规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可
0b11010110=1101、0110=13、6=0XD6
八进制转二进制规则:将八进制数每1位,转成对应的一个3位的二进制数即可
0237=2、3、7=010、011、111=ob10011111
十六进制转二进制规则:将十六进制数每1位,转成对应的4位的一个二进制数即可
0X23B=2、3、B=0010、0011、1011=ob1000111011
四、