简书上的文章已经不再维护,有兴趣阅读其他文章,或一起交流的朋友,请移步 我的博客: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
非原创,原文不详,侵删。
网友评论