03-Solidity8.0-类型和值

440 阅读2分钟

下面说一些Solidity语言中一些常用的类型和值:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;


contract ValuesTypes{
    bool public b = true;
    uint public u = 123;//uint = uint256 0 to 2**256 -1;
                        //      = uint8 0 to 2**8 -1;
                        //      = uint16 0 to 2**16 -1;
    int public i = -123;//int = int256 -2**255 to 2**255 -1;
                        //      =int128 -2**127 to 2**127 -1;
    int public minInt = type(int).min;
    int public maxInt = type(int).max;
    address public addr = 0x3Ded1C92C515138242839c7d30520f07f8D97508;
    bytes32 public b32 = 0x122...........;
}

1 布尔类型 bool

布尔类型的关键词是bool,其值可以为true或者false,这个类型与其他语言基本相同。

有两个运算符需要注意,分别是||和&&。在这里,它们遵循短路原则,意思就是如果在||时第一个变量值为true,就不会去看第二个变量了。同样的,如果&&的时候第一个变量为false,也不会去看第二个变量。

Tips:布尔类型在实际的运算与比较当中有可能是某个表达式的结果,如果这个表达式涉及到对某个变量的修改,建议放在布尔类型运算符外。

2 无符号整数 uint

uint 正整数,不可以取负数,默认uint256位

3 有符号整数 int

和unit相反

4 地址类型 address

地址类型是以太坊的一个特有类型,它是一个160位二进制的数,不同于Bitcoin的UTXO模型,以太坊交易是以其特定的账户模型,每个账户都有其对应的地址。

地址类型有几个常用的成员函数可以调用,首先是balance可以调用地址的当前余额,transfer和send可以向当前地址发送代币。

在合约当中,this关键字对应的是该合约的地址,address(this)可以返回对应的值。

5 定长字节数组 bytes

bytes类型又被成为定长字节数组,但是其实它在定义时并不像其他数组那样,它在定义时就是一个固定的长度的储存空间,长度可以从1~32,定义时使用bytes2这样表示2个字节长度的值,bytes1的别称是byte。

当后面不带数字时,bytes单写则是表示不定长数组,就属于引用变量类型了,有时这个写法会带来一些不必要的内存使用,这个后面我们会讨论。

bytes类型的变量在初始化之后就不可以进行更改了,如果要对它进行修改,需要通过遍历的方式赋给一个新的变量。

bytes变量也有一个length的成员函数,可以输出这个变量的长度是多少,便于遍历的执行。