计算机位运算:

运算符作用示列
&按位与两个操作数同时为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++位运算符 | & ^ ~ && ||,补码,反码