- /* C 语言 按位异或实现加法 */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void test1()
- {
- int a = 2;
- int b = 3;
- int cand = 0;
- int cxor = 0;
- int c = 0;
- // 实现 c=a+b
- //1. 不考虑进位, 按位计算各位累加 (用异或实现), 得到值 xor;
- cxor = a^b;
- /*
- 实现说明:
- a 的值是 2, 对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0010
- b 的值是 3, 对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0011
- a^b 即
- 0000 0000 0000 0000 0000 0000 0000 0010
- 0000 0000 0000 0000 0000 0000 0000 0011
- 0000 0000 0000 0000 0000 0000 0000 0001 ---> 异或结果
- */
- //2. 考虑进位, 进行位与运算之后, 结果左移 1 位
- cand = a&b;
- /*
- 实现说明:
- a 的值是 2, 对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0010
- b 的值是 3, 对应计算机中补码是 0000 0000 0000 0000 0000 0000 0000 0011
- a^b 即
- 0000 0000 0000 0000 0000 0000 0000 0010
- 0000 0000 0000 0000 0000 0000 0000 0011
- 0000 0000 0000 0000 0000 0000 0000 0010 ---> 与结果
- 0000 0000 0000 0000 0000 0000 0000 0100 ---> 与结果左移 1 位, 即 cand 的值
- */
- //3. 进行求和计算
- c = cxor + (cand <<1);
- /*
- 实现说明:
- 0000 0000 0000 0000 0000 0000 0000 0001 ---> 异或结果
- 0000 0000 0000 0000 0000 0000 0000 0100 ---> 与结果左移 1 位, 即 cand 的值
- 0000 0000 0000 0000 0000 0000 0000 0101 ---> 最终结果是 5
- */
- printf("--test1--c[%d]--\n", c);
- }
- void test2()
- {
- int a = -2;
- int b = 3;
- int cand = 0;
- int cxor = 0;
- int c = 0;
- // 实现 c=a+b
- //1. 不考虑进位, 按位计算各位累加 (用异或实现), 得到值 xor;
- cxor = a^b;
- /*
- 实现说明:
- a 的值是 2, 对应计算机中补码是 1 111 1111 1111 1111 1111 1111 1111 1110
- b 的值是 3, 对应计算机中补码是 0 000 0000 0000 0000 0000 0000 0000 0011
- a^b 即
- 1 111 1111 1111 1111 1111 1111 1111 1110
- 0 000 0000 0000 0000 0000 0000 0000 0011
- 1 111 1111 1111 1111 1111 1111 1111 1101 ---> 异或结果
- */
- //1. 考虑进位, 进行位与运算之后, 结果左移 1 位
- cand = a&b;
- /*
- 实现说明:
- a 的值是 2, 对应计算机中补码是 1 111 1111 1111 1111 1111 1111 1111 1110
- b 的值是 3, 对应计算机中补码是 0 000 0000 0000 0000 0000 0000 0000 0011
- a^b 即
- 1 111 1111 1111 1111 1111 1111 1111 1110
- 0 000 0000 0000 0000 0000 0000 0000 0011
- 0 000 0000 0000 0000 0000 0000 0000 0010 ---> 与结果
- 0 000 0000 0000 0000 0000 0000 0000 0100 ---> 与结果左移 1 位, 即 cand 的值
- */
- //3. 进行求和计算
- c = cxor + (cand <<1);
- /*
- 实现说明:
- 1 111 1111 1111 1111 1111 1111 1111 1101 ---> 异或结果
- 0 000 0000 0000 0000 0000 0000 0000 0100 --->cand 的值
- 0 000 0000 0000 0000 0000 0000 0000 0001 ---> 最终结果是 1
- */
- printf("--test2--c[%d]--\n", c);
- }
- int main()
- {
- test1();
- test2();
- printf("--------ok-------\n");
- getchar();
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3338412.html