用位操作实现加法运算

来源:互联网 发布:iphone8支持5g网络吗 编辑:程序博客网 时间:2024/06/08 15:52

问题描述:
对下面代码中的a进行位操作(只能进行位运算),实现输出OPQ

int a = 0x434241;printf("%s\n", (char*)&a);

参考代码:

#include <stdio.h>int add(int a, int b){    //思路: a+b=a^b + (a&b)<<1;其中a^b是不考虑进位的加,只有位相同才有进位所以(a&b)<<1则是进位的值,    //每进行一次操作,进位末尾补0,也就是说,最多进行b的二进制位数次操作即可完成计算    if (b == 0)        return a;    return add(a ^b, (a&b) << 1);}int main(){    int a = 0x434241;    //a = (a ^ 0x51504F) ^ a;    a = add(a, 0x0e0e0e);    printf("%s\n", (char*)&a);    return 0;}
3 1