往期回顾
- Solidity快速上手教程(一)—— HelloWorld_1.sol(读取链上数据)
- Solidity快速上手教程(二)—— HelloWorld_2.sol(修改链上数据,并读取)
- Solidity快速上手教程(三)—— 简单几种基本数据类型和认识结构体
本节知识点
完整版的基础数据类型和整数运算、逻辑运算,以及一些简单的计算机底层的东东,例如二进制、整型溢出的原因、以及整型在底层的存储方式。
开始喽
基本数据类型 | 举个例子 |
---|---|
bool |
true , false
|
string | "HelloHuman" |
int |
1 , -1000 , 666
|
byte |
0xcd , 0x16
|
uint | 0 |
- bool 类型
之前在教程三里面,咱们没刻意提 bool
的具体值是什么,bool
是 boolean
的缩写,念作 布尔型
它只有两种值: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 类型:字节型数据,
byte
是bytes1
的别名,表示一个字节(八个比特)
课外作业
今天没有作业,晚安 ( ̄o ̄) . z Z