#define SIZE_OF_INT 4
#if SIZE_OF_INT == 4
int 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;
}
#else
int add(unsigned int a, unsigned int b)
{
return a + b;
}
#endif
integer addition in terms of bit operators, just for fun
最新推荐文章于 2018-02-12 22:43:00 发布