- #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,(_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,(_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,(_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,(_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,(_B)>>16,__ADDER_16_C(_A&65535,_B&65535,_C))#define ADD(_A,_B) __ADDER_32_S(_A,_B,0)
复制代码 不用+号很简单,这里只用了^ & | >位运算实现32位加法.- int add(int a, int b){ return ADD(a, b);}//add(1,2)//result: 3
复制代码 |