/*C语言用异或相加*/#include#include#include
voidtest1 () )
{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,对应的计算机补码为00000000000000000000000000000000000000000000000000
b的值为3,对应的计算机补码为000000000000000000000000000000000000000000000000001
a^b即
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
00000000000000000000000000000000000000000000001-- -异或的结果*/
//2 .考虑进位,进行位和运算后,将结果向左偏移1位
cand=ab; /*实施说明:
a的值为2,对应的计算机补码为00000000000000000000000000000000000000000000000000
b的值为3,对应的计算机补码为000000000000000000000000000000000000000000000000001
a^b即
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0011
00000000000000000000000000000000000000000000000-- -和结果
000000000000000000000000000000000000000000000100----从结果开始向左1位,即cand的值*/
//3 .进行加法计算
c=cxor(cand1 ); /*实施说明:
0000000000000000000000000000000000000000000000001-- -异或的结果
0000000000000000000000000000000000000000000000100----结果和向左移位一位,即cand的值
000000000000000000000000000000000000101----最终结果为5*/printf((-test1----c[%d]----)、c );
} Void测试2 () ) )。
{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,对应的计算机补码为11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
b的值为3,对应的计算机补码为000000000000000000000000000000000000000000000000001
a^b即
1 111 1111 1111 1111 1111 1111 1111 1110
0 000 0000 0000 0000 0000 0000 0000 0011
111111111111111111111111111111111111111101----异或的结果*/
//1 .考虑进位,进行位和运算后,将结果向左偏移1位
cand=ab; /*实施说明:
a的值为2,对应的计算机补码为11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
b的值为3,对应的计算机补码为000000000000000000000000000000000000000000000000001
a^b即
1 111 1111 1111 1111 1111 1111 1111 1110
0 000 0000 0000 0000 0000 0000 0000 0011
00000000000000000000000000000000000000000000000-- -和结果
000000000000000000000000000000000000000000000100----从结果开始向左1位,即cand的值*/
//3 .进行加法计算
c=cxor(cand1 ); /*实施说明:
111111111111111111111111111111111111111111101-- -异或的结果
000000000000000000000000000000000000000000000100---cand的值
000000000000000000000000000000000000000001----最终结果为1*/printf((-test2----c[%d]----)、c );
}intmain () ) ) ) ) )。
{
test1 (;
test2(;
printf (------ -确定----) );
getchar (; 返回0;
}