位运算

solidity中,可以对于最底层的位进行操作。

由于以太坊中需要消耗gas,因此,为了节约gas、所以对于位的操作会用到比较频繁。
solidity中支持多种类型的位运算操作
1、位与 &
2、位或 |
3、位异或 ^
4、位取反 ~
5、<<
6、>>

数字3、4的二进制表示

wei.png

数字3、4的底层表示

位与

weiyu.png

位与

位或

weihuo.png

位或

位异或

weiyihuo.png

位异或

位取反

weiqufan.png

位取反

位左移

weizuoyi.png

位左移

位右移

weiyouyi.png

位右移

位运算例子

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
pragma solidity ^0.4.23; contract weiTest{
   uint8 a = 3;    uint8 b = 4;    function  weiyu() public view returns(uint8){
       return  a &b;    }     function  weihuo() public view returns(uint8){
       return  a |b;    }     function  weiyihuo() public view returns(uint8){
       return  a^b;    }      function  qufan() public view returns(uint8){
       return  ~a;    }        function  leftMove() public view returns(uint8){
       return  a<<1;    }        function  rightMove() public view returns(uint8){
       return  a>>1;    } }

整型字面量

solidity在计算过程中的中间值,支持任意的精度,如小数。不会发生溢出操作。

只有在将计算结果赋值给特定类型的时候,才会发生截断溢出等操作。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//返回1 function  TestInterger() public pure returns(uint8){
    uint8 num = (2**800+1) - 2**800;     return num; } //返回50 function  TestInterger2() public pure returns(uint8){
    uint8 num = 2/4*100;     return num; } //返回1  function  TestInterger3() public pure returns(uint8){
    uint8 num =11111111111111111111111111111111111111111111112-11111111111111111111111111111111111111111111111;     return num; }
  • 本文链接: 

  • 版权声明: 本博客所有文章除特别声明外,均采用  许可协议。转载请注明出处!

image.png