Solidity快速上手教程(四)

往期回顾

本节知识点

完整版的基础数据类型和整数运算、逻辑运算,以及一些简单的计算机底层的东东,例如二进制、整型溢出的原因、以及整型在底层的存储方式。

开始喽

基本数据类型 举个例子
bool true, false
string "HelloHuman"
int 1, -1000, 666
byte 0xcd, 0x16
uint 0
  • bool 类型

  之前在教程三里面,咱们没刻意提 bool 的具体值是什么,boolboolean 的缩写,念作 布尔型 它只有两种值:true 或者 false,表示或者,就好比上次我们例子中的 isStudent,记录对应地址的用户是不是学生。

  对于真假值的计算,称作逻辑运算,要使用逻辑运算符

   &&:两真才真,一假必假;
   ||:两假才假,一真则真;
   !  :真变假,假变真。

Solidity bool 代码演示

pragma solidity ^0.4.26;

contract BaseTypeBool{

    function AndTest(bool a, bool b) public pure returns(bool){
        return a&&b;
    }

    function OrTest(bool a, bool b) public pure returns(bool){
        return a||b;
    }

    function NotTest(bool a) public pure returns(bool){
        return !a;
    }

}

使用 pure 进行链下计算更省 gas

  • string 类型

没啥好说的=。=就这样吧

  • int 类型:有符号整数,可以是整数也可以是负数
  • uint 类型:无符号整数,只能是 ≥ 0 的数

这俩说道说道,还是有点儿要交代的,比如算术运算。

  这里就直接用 uint 作为案例了。

算术运算符 含义
+ 加法
- 减法
* 乘法
/ 除法
% 取余数
** 乘方

-O-困死我了【2022年7月4日23点48分】

Solidity uint 代码演示

pragma solidity ^0.4.26;

contract BaseTypeUint{

    function AddTest(uint a, uint b) public pure returns(uint){
        return a+b;
    }

    function SubTest(uint a, uint b) public pure returns(uint){
        return a-b;
    }

    function MulTest(uint a, uint b) public pure returns(uint){
        return a*b;
    }

    function DivTest(uint a, uint b) public pure returns(uint){
        return a/b;
    }

    function ModTest(uint a, uint b) public pure returns(uint){
        return a%b;
    }

    function PowerTest(uint a, uint b) public pure returns(uint){
        return a**b;
    }

}

要注意的是在计算机底层,值都是用二进制表示的。

  比如说 uint8 的 8,就是 0000 1000
  又比如 uint8 的 7,就是 0000 0111

  这里就会涉及到知识点——整型溢出,就是说计算的时候超过了指定数据类型的长度,比如说 255+1 ,在二进制中就表示为:

  1111\ 1111 + 0000\ 0001 = 1\ 0000\ 0000

  但是uint8只有8位,所以最高的那位就被截断了,变成 0000 0000,也就是 0 。

  • byte 类型:字节型数据,bytebytes1 的别名,表示一个字节(八个比特)

课外作业

今天没有作业,晚安 ( ̄o ̄) . z Z

1 Like