integer addition in terms of bit operators, just for fun

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值