计算机位运算:
运算符 | 作用 | 示列 |
---|
& | 按位与 | 两个操作数同时为1结果为1,只要有一个为0,结果为0 |
| | 按位或 | 两个操作数只要有一个为1,结果就为1 |
~ | 按位非 | 操作数为1,结果为0;操作数为0,结果为1 |
^ | 按位异或 | 两个操作数相同,结果为0;不相同结果为1 |
<< | 左移 | 右侧空位补0,左侧溢出舍弃 |
>> | 右移 | 右端溢出舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”) |
加法器实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| // 递归写法
int add(int num1, int num2){
if(num2 == 0)
return num1;
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
return add(sum, carry);
// 迭代写法
int add(int num1, int num2){
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
while(carry != 0){
int a = sum;
int b = carry;
sum = a ^ b;
carry = (a & b) << 1;
}
return sum;
|
org-mode 表格
位运算实现加、减、乘、除运算
c++位运算符 | & ^ ~ && ||,补码,反码