solidity
一、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
四、