Solidity – 运算符
- 难度级别: 简单
- 最后更新: 2022 年 5 月 11 日
在任何编程语言中,操作员都扮演着至关重要的角色,即他们为编程奠定了基础。同样,如果不使用操作符,Solidity 的功能也是不完整的。运算符允许用户对操作数执行不同的操作。Solidity 根据其功能支持以下类型的运算符。
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 条件运算符
算术运算符
这些运算符用于执行算术或数学运算。Solidity 支持以下算术运算符:
操作员 | 表示 | 描述 |
---|---|---|
添加 | + | 用于添加两个操作数 |
减法 | – | 用于从第一个操作数中减去第二个操作数 |
乘法 | * | 用于将两个操作数相乘 |
分配 | / | 用于将分子除以分母 |
模数 | % | 给出整数除法后的余数 |
增量 | ++ | 将整数值加一 |
递减 | — | 将整数值减一 |
示例:在下面的示例中,SolidityTest 合约演示了上述不同类型的算术运算符。
- 坚固性
// Solidity contract to demonstrate
// Arithmetic Operator
pragma solidity ^0.5.0;
// Creating a contract
contract SolidityTest {
// Initializing variables
uint16 public a = 20;
uint16 public b = 10;
// Initializing a variable
// with sum
uint public sum = a + b;
// Initializing a variable
// with the difference
uint public diff = a - b;
// Initializing a variable
// with product
uint public mul = a * b;
// Initializing a variable
// with quotient
uint public div = a / b;
// Initializing a variable
// with modulus
uint public mod = a % b;
// Initializing a variable
// decrement value
uint public dec = --b;
// Initializing a variable
// with increment value
uint public inc = ++a;
}
|
输出 :
关系运算符
这些运算符用于比较两个值。Solidity 支持以下关系运算符:
操作员 | 表示 | 描述 |
---|---|---|
平等的 | == | 检查两个值是否相等,如果相等则返回 true,反之亦然 |
不相等 | != | 检查两个值是否相等,如果不相等则返回 true,反之亦然 |
比...更棒 | > | 检查left值是否大于right,如果大于则返回true,反之亦然 |
少于 | < | 检查left值是否小于right,如果小于则返回true,反之亦然 |
大于或等于 | >= | 检查left值是否大于等于right,如果大于等于则返回true,反之亦然 |
小于或等于 | <= | 检查left值是否小于right,如果小于等于则返回true,反之亦然 |
示例:在下面的示例中,合约 SolidityTest演示了上述不同类型的关系运算符。
- 坚固性
// Solidity program to demonstrate
// Relational Operator
pragma solidity ^0.5.0;
// Creating a contract
contract SolidityTest {
// Declaring variables
uint16 public a = 20;
uint16 public b = 10;
// Initializing a variable
// with bool equal result
bool public eq = a == b;
// Initializing a variable
// with bool not equal result
bool public noteq = a != b;
// Initializing a variable
// with bool greater than result
bool public gtr = a > b;
// Initializing a variable
// with bool less than result
bool public les = a < b;
// Initializing a variable
// with bool greater than equal to result
bool public gtreq = a >= b;
// Initializing a variable
// bool less than equal to result
bool public leseq = a <= b;
}
|
输出 :
逻辑运算符
这些运算符用于组合两个或多个条件。Solidity 支持以下算术运算符:
操作员 | 表示 | 描述 |
---|---|---|
逻辑与 | && | 如果两个条件都为真,则返回真,如果一个或两个条件都为假,则返回假 |
逻辑或 | || | 如果一个或两个条件都为真,则返回真,如果两个条件都为假,则返回假 |
逻辑非 | ! | 如果条件不满足则返回真,否则返回假 |
示例:在下面的示例中,合约logicalOperator演示了上述不同类型的逻辑运算符。
- 坚固性
// Solidity program to demonstrate
// Logical Operators
pragma solidity ^0.5.0;
// Creating a contract
contract logicalOperator{
// Defining function to demonstrate
// Logical operator
function Logic(
bool a, bool b) public view returns(
bool , bool , bool){
// Logical AND operator
bool and = a&&b;
// Logical OR operator
bool or = a||b;
// Logical NOT operator
bool not = !a;
return (and, or, not);
}
}
|
输出 :
位运算符
这些运算符在用于执行位级操作的位级上工作。Solidity 支持以下算术运算符:
操作员 | 表示 | 描述 |
---|---|---|
按位与 | & | 对整数参数的每一位执行布尔 AND 运算 |
按位或 | | | 对整数参数的每一位执行布尔 OR 运算 |
按位异或 | ^ | 对整数参数的每一位执行布尔异或运算 |
按位不 | ~ | 对整数参数的每一位执行布尔 NOT 运算 |
左移 | << | 将第一个操作数的所有位向左移动第二个操作数指定的位数 |
右移 | >> | 将第一个操作数的所有位向右移动第二个操作数指定的位数 |
示例:在下面的示例中,SolidityTest 合约演示了上述不同类型的位运算符。
- 坚固性
/ / Solidity program to demonstrate
// Bitwise Operator
pragma solidity ^0.5.0;
// Creating a contract
contract SolidityTest {
// Declaring variables
uint16 public a = 20;
uint16 public b = 10;
// Initializing a variable
// to '&' value
uint16 public and = a & b;
// Initializing a variable
// to '|' value
uint16 public or = a | b;
// Initializing a variable
// to '^' value
uint16 public xor = a ^ b;
// Initializing a variable
// to '<<' value
uint16 public leftshift = a << b;
// Initializing a variable
// to '>>' value
uint16 public rightshift = a >> b;
// Initializing a variable
// to '~' value
uint16 public not = ~a ;
}
|
输出 :
赋值运算符
这些运算符用于将值分配给变量。左侧的操作数是可变的,而右侧的操作数是值。Solidity 支持以下算术运算符:
操作员 | 表示 | 描述 |
---|---|---|
简单分配 | = | 只需将右侧的值分配给左侧的操作数 |
添加作业 | += | 将右侧的操作数添加到左侧的操作数,并将值分配给左侧操作数 |
减去作业 | -= | 从左侧的操作数中减去右侧的操作数并将值赋给左侧的操作数 |
乘法分配 | *= | 将两个操作数相乘并将值分配给左操作数 |
分配作业 | /= | 将左侧的操作数除以右侧的操作数并将值分配给左侧操作数 |
模数赋值 | %= | 将左侧的操作数除以右侧的操作数并将余数分配给左侧操作数 |
示例:在下面的示例中,SolidityTest 合约演示了上述不同类型的赋值运算符。
- 坚固性
// Solidity program to demonstrate
// Assignment Operator
pragma solidity ^0.5.0;
// Creating a contract
contract SolidityTest {
// Declaring variables
uint16 public assignment = 20;
uint public assignment_add = 50;
uint public assign_sub = 50;
uint public assign_mul = 10;
uint public assign_div = 50;
uint public assign_mod = 32;
// Defining function to
// demonstrate Assignment Operator
function getResult() public{
assignment_add += 10;
assign_sub -= 20;
assign_mul *= 10;
assign_div /= 10;
assign_mod %= 20;
return ;
}
}
|
输出 :
条件运算符
它是一个三元运算符,首先计算表达式,然后检查条件以获取对应于真或假的返回值。
句法:
如果条件为真?然后 A:否则 B
示例:在下面的示例中,合约 SolidityTest演示了条件运算符。
- 坚固性
// Solidity program to demonstrate
// Conditional Operator
pragma solidity ^0.5.0;
// Creating a contract
contract SolidityTest{
// Defining function to demonstrate
// conditional operator
function sub(
uint a, uint b) public view returns(
uint){
uint result = (a > b? a-b : b-a);
return result;
}
}
|
输出 :