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 – 第一个程序中的步骤,运行上述程序。
输出
0: string: 2