题目:有两个10进制整数,仅使用与或运算完成两个整数的相加。
C语言中有个很美好的功能叫“位操作”,位操作符有6种。
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移 c=c<<1
>> 右移
考虑两个二进制数的相加,
1、将每位进行异或操作,操作之后得出的是不带进位加法的结果。
2、将每位进行与操作。当结果为1时说明该位产生进位。
3、将2的结果左移一位,得到的就是应该加在结果1上面的进位产生的数值。
4、用以上步骤进行1+3的操作,直到每一位都没有进位为止。
int main()
{
int a=5,b=3;
int c=0,time=0; /*c:存放进位,time:存放循环运行次数*/
do
{
c=a&b;
c=c<<1; /*进位数的总值*/
b=a^b; /*不带进位的加法*/
a=c;
time++;
}while(c);
printf("%d,run time=%d",b,time);
return(0);
}