33,008
社区成员
发帖
与我相关
我的任务
分享
乘法好像很难去掉临时变量, 唉:
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];
}
有临时变量不好, 还是这样:
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;
}
加减这样弄, 乘除自己弄吧:
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 ) );
}