integer addition in terms of bit operators, just for fun
来源:互联网 发布:聊天软件哪个好 编辑:程序博客网 时间:2024/05/18 18:45
#define SIZE_OF_INT 4#if SIZE_OF_INT == 4int add(unsigned int a, unsigned int b){ //implement integer addition with bit operators, just for fun unsigned int c = 0, result = 0; //the looking up table /******** bits s c 000 0 0 001 1 0 010 1 0 011 0 1 100 1 0 101 0 1 110 0 1 111 1 1 *********/ //the s(sum) column: 0x96 //the c(carry) column: 0xE8 unsigned char t;#define _ADD_IT_(i) \ t = ((a >> i & 1) << 2) | ((b >> i & 1) << 1 )|(c >> i & 1); \ result |= (0x96U >> t & 1) << i;\ c = (0xE8U >> t & 1) << (i+1); _ADD_IT_(0); _ADD_IT_(1); _ADD_IT_(2); _ADD_IT_(3); _ADD_IT_(4); _ADD_IT_(5); _ADD_IT_(6); _ADD_IT_(7); _ADD_IT_(8); _ADD_IT_(9); _ADD_IT_(10); _ADD_IT_(11); _ADD_IT_(12); _ADD_IT_(13); _ADD_IT_(14); _ADD_IT_(15); _ADD_IT_(16); _ADD_IT_(17); _ADD_IT_(18); _ADD_IT_(19); _ADD_IT_(20); _ADD_IT_(21); _ADD_IT_(22); _ADD_IT_(23); _ADD_IT_(24); _ADD_IT_(25); _ADD_IT_(26); _ADD_IT_(27); _ADD_IT_(28); _ADD_IT_(29); _ADD_IT_(30); _ADD_IT_(31); return result; }#elseint add(unsigned int a, unsigned int b){ return a + b;}#endif