使用与或运算完成两个整数的相加

来源:互联网 发布:1hhhh最新区域名 编辑:程序博客网 时间:2024/06/05 18:05

题目:有两个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);}