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

四、

 

posted @ 2023-06-16 22:16  CentKiller  阅读(82)  评论(0编辑  收藏  举报