美文网首页代码改变世界C++
使用位运算实现加法运算

使用位运算实现加法运算

作者: 胖绵羊 | 来源:发表于2016-08-04 00:16 被阅读0次

简书上的文章已经不再维护,有兴趣阅读其他文章,或一起交流的朋友,请移步 我的博客:punmy.cn

原文


位操作实现加法

这是用位运算实现的加法运算,有需要使用位运算来优化算法效率的可以参考一下。

代码如下:

#define HALF_ADDER_S(_N,_M) ((_N)^(_M))
#define HALF_ADDER_C(_N,_M) ((_N)&(_M))

#define FULL_ADDER_S(_A,_B,_C) (HALF_ADDER_S(HALF_ADDER_S(_A,_B),_C))
#define FULL_ADDER_C(_A,_B,_C) (HALF_ADDER_S(HALF_ADDER_C(HALF_ADDER_S(_A,_B),_C),HALF_ADDER_C(_A,_B)))

#define __ADDER_1_S(_A,_B,_C) FULL_ADDER_S(_A,_B,_C)
#define __ADDER_1_C(_A,_B,_C) FULL_ADDER_C(_A,_B,_C)

#define __ADDER_2_S(_A,_B,_C) (__ADDER_1_S(_A&1,_B&1,_C)| \
    __ADDER_1_S((_A)>>1,(_B)>>1,__ADDER_1_C(_A&1,_B&1,_C))<<1)
#define __ADDER_2_C(_A,_B,_C) __ADDER_1_C((_A)>>1,(_B)>>1,__ADDER_1_C(_A&1,_B&1,_C))

#define __ADDER_4_S(_A,_B,_C) (__ADDER_2_S(_A&3,_B&3,_C)| \
    __ADDER_2_S((_A)>>2,(_B)>>2,__ADDER_2_C(_A&3,_B&3,_C))<<2)
#define __ADDER_4_C(_A,_B,_C) __ADDER_2_C((_A)>>2,(_B)>>2,__ADDER_2_C(_A&3,_B&3,_C))

#define __ADDER_8_S(_A,_B,_C) (__ADDER_4_S(_A&15,_B&15,_C)| \
    __ADDER_4_S((_A)>>4,(_B)>>4,__ADDER_4_C(_A&15,_B&15,_C))<<4)
#define __ADDER_8_C(_A,_B,_C) __ADDER_4_C((_A)>>4,(_B)>>4,__ADDER_4_C(_A&15,_B&15,_C))

#define __ADDER_16_S(_A,_B,_C) (__ADDER_8_S(_A&255,_B&255,_C)| \
    __ADDER_8_S((_A)>>8,(_B)>>8,__ADDER_8_C(_A&255,_B&255,_C))<<8)
#define __ADDER_16_C(_A,_B,_C) __ADDER_8_C((_A)>>8,(_B)>>8,__ADDER_8_C(_A&255,_B&255,_C))

#define __ADDER_32_S(_A,_B,_C) (__ADDER_16_S(_A&65535,_B&65535,_C)| \
    __ADDER_16_S((_A)>>16,(_B)>>16,__ADDER_16_C(_A&65535,_B&65535,_C))<<16)
#define __ADDER_32_C(_A,_B,_C) __ADDER_16_C((_A)>>16,(_B)>>16,__ADDER_16_C(_A&65535,_B&65535,_C))

#define ADD(_A,_B) __ADDER_32_S(_A,_B,0)

用法:
使用时只需要新建一个头文件,并在需要用到位运算加的地方#include进去,具体用法如下:

ADD(a, b);

//ADD(1,2)
//result: 3

非原创,原文不详,侵删。

相关文章

网友评论

    本文标题:使用位运算实现加法运算

    本文链接:https://www.haomeiwen.com/subject/iulcsttx.html