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