0
所以我想實現這個算法下乘以32位無符號整數,以便更好地理解它:正整數乘法用C
什麼,我沒有得到的是如何實現步驟2 。它說要將被乘數加到產品的左半邊,並存放在產品註冊的左半邊。我很困惑如何只添加到產品的左半部分。我如何去做這件事?
編輯: 這是我帶來的東西,但它不給我正確的答案,我不知道什麼是錯的。請幫忙!
long unsigned UnsignedMult(unsigned multiplicand, unsigned multiplier){
unsigned int temp32a, temp32b;
unsigned long temp64;
unsigned long product;
int i;
product = multiplier;
temp32b = multiplicand;
for(i=0; i < 32; i++){
if((product & 1)==1){ //add
temp64 = product;
temp64 = temp64 >> 32;
temp32a = temp64;
product = BinaryAdd(temp32a, temp32b);
}
product = product >>= 1;
}
return product;
}
int BinaryAdd(int in1, int in2){
int sum, carry;
sum = in1^in2; // x XOR y
carry = in1 & in2; // x AND y carry in
int i;
for (i = 0; i < 32; i++) {
carry = carry << 1;
in1 = sum;
in2 = carry;
sum = in1^in2; //calculate sum
carry = in1 & in2; //find carry out
}
return sum;
}
有沒有辦法做到這一點沒有?我對C很新,並且不熟悉。 –
JSolo714
2015-02-18 01:19:49
是的,您可以使用兩個32位整數來模擬64位寄存器。唯一棘手的問題是右移,因爲您需要將上半部分的最右側位移到下半部分的最左側位。我會在上面的示例中添加一些代碼。 – Alan 2015-02-18 08:15:13