本文共 433 字,大约阅读时间需要 1 分钟。
题目:有两个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);}
转载地址:http://eymji.baihongyu.com/