求 位运算模拟 + - * /

namewchwch 2010-10-24 02:10:24
在整形数使用位运算来模拟 基本数学运算。
...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2010-10-25
  • 打赏
  • 举报
回复
乘法好像很难去掉临时变量, 唉:

int32 mul32( int32 a , int32 b )
{
int32 r[2] = {0};

#define DO1( i ) r[(b>>(i))&1]=add32(r[(b>>(i))&1],a<<(i));
#define DO4( i ) DO1(i) DO1(i+1) DO1(i+2) DO1(i+3)
#define DO8( i ) DO4(i) DO4(i+4)
DO8(0) DO8(8) DO8(16) DO8(24)
#undef DO8
#undef DO4
#undef DO1
return r[1];
}
mLee79 2010-10-25
  • 打赏
  • 举报
回复
有临时变量不好, 还是这样:
int32 add32( int32 a , int32 b )
{
#define DO1 (b^=a,a=(a&(a^b))<<1);
#define DO8 DO1 DO1 DO1 DO1 DO1 DO1 DO1 DO1
DO8 DO8 DO8 DO8 ;
return b;
}
mLee79 2010-10-25
  • 打赏
  • 举报
回复
加减这样弄, 乘除自己弄吧:

typedef int int32;

int32 add32( int32 a , int32 b )
{
int32 c;
#define DO1 ( c = a & b , b ^= a , a = c << 1 );
#define DO8 DO1 DO1 DO1 DO1 DO1 DO1 DO1 DO1
DO8 DO8 DO8 DO8 ;
return b;
}

int sub32( int32 a , int32 b )
{
return add32( a , add32( 1 , ~b ) );
}
yui 2010-10-24
  • 打赏
  • 举报
回复
http://hi.baidu.com/gamedot/blog/item/dcb777352590ff8da61e129e.html

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧