/* 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]-- ", 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]-- ", c); } int main() { test1(); test2(); printf("--------ok------- "); getchar(); return 0; }