链眼社区:专注于区块链安全,区块链数据分析, 区块链信息整合,区块链技术服务和区块链技术咨询。

solidity智能合约的整型与运算
chaineye
2021-07-27 20:27:46

1. 整型变量

整数是现实中处理最多的单位,在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

2. 整型运算

1、加

2、减

3、乘

4、除

5、取余数

6、平方

//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;
 }

3.整型溢出

整数如果处理不当,会发生溢出效应。如下面的函数overflow。

函数的功能为执行+1的操作。 当传递4、返回5. 传递200,返回201,但是当传递255的时候,会返回0,这是由于发生了溢出。

要理解溢出的本质,需要明白整型在计算机中的存储方式。

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

4. 整型在底层的存储方式

计算机最小的存储单位为位,存储0或者1。 下面的图片描述了以位标示的二进制代码101转换为10进制后的计算方式。

1.png

底层存储方式


以此类推,可知道,uint8在内存中占8位,最大值为全部都存储1的时候,转换为10进制为255。

max.png

uint8最大值

当加一之后,

1111 1111

变为了

10000 0000

但是只能存储8位,所以截断之后,变为了

0000 0000

所以返回结果为0


申请入驻

成为作者,让更多人看到您的观点

入驻
合作伙伴