回复 39楼 beyondyf
程序代码://先谢过杨大哥了 ,接着回答思考题
#include<stdio.h>
#include<math.h>
int mul(unsigned int a, unsigned int b)
{
unsigned int c, f, t;
for(c = 0; a && b; c ^= t, a <<= 1, b >>= 1)
for(t = b & 1 ? a : 0; f = c & t; c ^= t, t = f << 1);
return c;
}
int mult_bit(int n,int m){
int sum=0,temp=0,f;
n=abs(n),m=abs(m);
for(int i=0;f=m>>i;i++){
if(f&1)temp=n<<i;else continue;
for(;f=sum&temp;sum^=temp,temp=f<<1);
sum^=temp;
}
return (n^m)<0?-sum:sum;
}
int main()
{
//同一个数在计算机中内存中的二进制是一样的
//不同的类型就决定了这个二进制数的解释,和参与的运算
//我就是解决不了负数移位的问题才把数都转换成正数的...
//意义是:用无符号整型参与运算,用有符号整型解释内部二进制(因为他本来就是有符号的)
//这样应该能表示出来了吧
unsigned x=-1;
int y=-1;
printf("\n%X,,,%X\n\n",x,y);
for(int i=0;i<sizeof(int)*8;)
printf("x>>%d:=%X,,,y>>%d:=%X\n",++i,x>>=1,i,y>>=1);
//有没有问题我真看不出来,不过这算不算问题我也不知道
printf("\nmul:%d * %d = %d\n",0x80000001, 2, mul(0x80000001, 2));
printf("mult_bit:%d * %d = %d\n",0x80000001, 2, mult_bit(0x80000001, 2));
printf("mul:%d * %d = %d\n",0x80000000, 2, mul(0x80000000, 2));
printf("mult_bit:%d * %d = %d\n",0x80000000, 2, mult_bit(0x80000000, 2));
return 0;
}
//我叫小陈只能想到这么多了,求杨大哥指点一下。

WE GO









