回复 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