• 区块链入门到实战(36)之Solidity – 运算符


    Solidity – 算术运算符

    Solidity 支持的算术运算符,如下表所示:

    假设变量A的值为10,变量B的值为20。

    序号运算符与描述
    1 + (加)
    求和
    例: A + B = 30
    2 – (减)
    相减
    例: A – B = -10
    3 * (乘)
    相乘
    例: A * B = 200
    4 / (除)
    相除
    例: B / A = 2
    5 % (取模)
    取模运算
    例: B % A = 0
    6 ++ (递增)
    递增
    例: A++ = 11
    7 — (递减)
    递减
    例: A– = 9

    示例

    下面的代码展示了如何使用算术运算符。

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       constructor() public{
       }
       function getResult() public view returns(uint){
          uint a = 1; 
          uint b = 2;
          uint result = a + b; // 算术运算
          return result; 
       }
    }

    Solidity – 比较运算符

    Solidity 支持的比较运算符,如下表所示:

    序号运算符与描述
    1 == (等于)
    2 != (不等于)
    3 > (大于)
    4 < (小于)
    5 >= (大于等于)
    6 <= (小于等于)

    下面的代码展示了如何使用比较运算符。

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 1; // 局部变量
          uint b = 2;
          uint result = a + b;
          return integerToString(result); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory _uintAsString) {
    
          if (_i == 0) {   // 比较运算符
             return "0";
          }
          uint j = _i;
          uint len;
    
          while (j != 0) {  // 比较运算符
             len++;
             j /= 10;
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
    
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);// 访问局部变量
       }
    }

    Solidity – 逻辑运算符

    Solidity 支持的逻辑运算符,如下表所示:

    假设变量A的值为10,变量B的值为20。

    序号运算符与描述
    1 && (逻辑与)
    如果两个操作数都非零,则条件为真。
    例: (A && B) 为真
    2 || (逻辑或)
    如果这两个操作数中有一个非零,则条件为真。
    例: (A || B) 为真
    3 ! (逻辑非)
    反转操作数的逻辑状态。如果条件为真,则逻辑非操作将使其为假。
    例: ! (A && B) 为假

    示例

    下面的代码展示了如何使用逻辑运算符

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; // 状态变量
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 1; // 局部变量
          uint b = 2;
          uint result = a + b;
          return integerToString(storedData); // 访问状态变量
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
    
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
    
          while (!(j == 0)) {  // 逻辑运算符
             len++;
             j /= 10;
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
    
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);
       }
    }

    Solidity – 位运算符

    Solidity 支持的位运算符,如下表所示:

    假设变量A的值为2,变量B的值为3。

    序号运算符与描述
    1 & (位与)
    对其整数参数的每个位执行位与操作。
    例: (A & B) 为 2.
    2 | (位或)
    对其整数参数的每个位执行位或操作。
    例: (A | B) 为 3.
    3 ^ (位异或)
    对其整数参数的每个位执行位异或操作。
    例: (A ^ B) 为 1.
    4 ~ (位非)
    一元操作符,反转操作数中的所有位。
    例: (~B) 为 -4.
    5 << (左移位))
    将第一个操作数中的所有位向左移动,移动的位置数由第二个操作数指定,新的位由0填充。将一个值向左移动一个位置相当于乘以2,移动两个位置相当于乘以4,以此类推。
    例: (A << 1) 为 4.
    6 >> (右移位)
    左操作数的值向右移动,移动位置数量由右操作数指定
    例: (A >> 1) 为 1.

    示例

    下面的代码展示了如何使用位运算符

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 2; // 局部变量
          uint b = 2;
          uint result = a & b;  // 位与
          return integerToString(result); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
    
          while (j != 0) {
             len++;
             j /= 10;
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
    
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);// 访问局部变量
       }
    }

    Solidity – 赋值运算符

    Solidity 支持的赋值运算符,如下表所示:

    序号运算符与描述
    1 = (简单赋值)
    将右侧操作数的值赋给左侧操作数
    例: C = A + B 表示 A + B 赋给 C
    2 += (相加赋值)
    将右操作数添加到左操作数并将结果赋给左操作数。
    例: C += A 等价于 C = C + A
    3 −= (相减赋值)
    从左操作数减去右操作数并将结果赋给左操作数。
    例: C -= A 等价于 C = C – A
    4 *= (相乘赋值)
    将右操作数与左操作数相乘,并将结果赋给左操作数。
    例: C *= A 等价于 C = C * A
    5 /= (相除赋值)
    将左操作数与右操作数分开,并将结果分配给左操作数。
    例: C /= A 等价于 C = C / A
    6 %= (取模赋值)
    使用两个操作数取模,并将结果赋给左边的操作数。
    例: C %= A 等价于 C = C % A

    注意 – 同样的逻辑也适用于位运算符,因此它们将变成<<=>>=>>=&=|=^=

    下面的代码展示了如何使用赋值运算符。

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 1; 
          uint b = 2;
          uint result = a + b;
          return integerToString(storedData); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
          while (j != 0) {
             len++;
             j /= 10; // 赋值运算
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;// 赋值运算
          }
          return string(bstr);  // 访问局部变量
       }
    }

    Solidity – 条件运算符

    Solidity 支持条件运算符。

    序号运算符与描述
    1 ? : (条件运算符 )
    如果条件为真 ? 则取值X : 否则值Y

    示例

    下面的代码展示了如何使用这个运算符

    pragma solidity ^0.5.0;
    
    contract SolidityTest {
       uint storedData; 
       constructor() public{
          storedData = 10;   
       }
       function getResult() public view returns(string memory){
          uint a = 1; // 局部变量
          uint b = 2;
          uint result = (a > b? a: b);  //条件运算
          return integerToString(result); 
       }
       function integerToString(uint _i) internal pure 
          returns (string memory) {
          if (_i == 0) {
             return "0";
          }
          uint j = _i;
          uint len;
          while (j != 0) {
             len++;
             j /= 10;
          }
          bytes memory bstr = new bytes(len);
          uint k = len - 1;
          while (_i != 0) {
             bstr[k--] = byte(uint8(48 + _i % 10));
             _i /= 10;
          }
          return string(bstr);
       }
    }

     参考区块链入门到实战(31)之Solidity – 第一个程序运行

  • 相关阅读:
    AD 485、422电路
    AD 差分
    思维导图
    68 二叉树的最近公共祖先
    65. 不用加减乘除做加法
    64. 求1+2+…+n
    10- I. 斐波那契数列
    11&12. 旋转数组的最小数字
    12. 矩阵中的路径
    13. 机器人的运动范围
  • 原文地址:https://www.cnblogs.com/huanghanyu/p/13182843.html
Copyright © 2020-2023  润新知