1. 程式人生 > >solidity智慧合約[7]-整型與運算

solidity智慧合約[7]-整型與運算

整型變數

整數是現實中處理最多的單位,在solidity中的整數型別有int和uint,int型別可以儲存負數,uint型別只能夠儲存非負數。
int型別:int8,int16,int24,int32…int256
uint型別:uint8,uint16,uint24,uint32…uint256

後面的數字代表的是計算機的最小儲存單位:位。 1個位元組代表8位。型別以一個位元組遞增,最大到256位,也就是32個位元組。
int == int256
uint == uint256

整型運算

1、加
2、減
3、乘
4、除
5、取餘數
6、平方

1
2
3
4
5
6
7
8
9
10
11
12
13
14

15
16
17
18
19
20
21
22
23
24
//1、加
function add(uint a,uint b) public pure returns(uint){
    return a+b;
}
//2、減
function sub(uint a,uint b) public pure returns(uint){
    return a-b;
}
//3、乘
 function cheng(uint a,uint b) public pure returns(uint){
    return a*b;
}
//4、除
function
chu(uint a,uint b) public pure returns(uint)
{

    return a/b;
}
//5、取餘數
  function yu(uint a,uint b) public pure returns(uint){
    return a%b;
}
//6、平方
function pingfang(uint a,uint b) public pure returns(uint){
    return a**b;
}

整型溢位

整數如果處理不當,會發生溢位效應。如下面的函式overflow。
函式的功能為執行+1的操作。 當傳遞4、返回5. 傳遞200,返回201,但是當傳遞255的時候,會返回0,這是由於發生了溢位。
要理解溢位的本質,需要明白整型在計算機中的儲存方式。

1
2
3
4
5
// 1111 1111
//10000 0000
function overflow(uint8 a) public pure returns(uint8){
   return a +1;
}

整型在底層的儲存方式

計算機最小的儲存單位為,儲存0或者1。 下面的圖片描述了以位標示的二進位制程式碼101轉換為10進位制後的計算方式。

底層儲存方式

以此類推,可知道,uint8在記憶體中佔8位,最大值為全部都儲存1的時候,轉換為10進製為255。

uint8最大值

當加一之後,
1111 1111
變為了
10000 0000
但是隻能儲存8位,所以截斷之後,變為了
0000 0000

所以返回結果為0

image.png