【发布时间】:2021-03-02 04:14:23
【问题描述】:
我已经设法在不使用任何算术运算符的情况下加减两个整数。我尝试过将两个整数相乘的乘法方法,但似乎没有任何进展。如何在不使用任何算术运算符的情况下将两个整数相乘?不能使用的算术运算符是 (+, ++, +=, -, --, -=, ∗, /, %)。同样从给出的指示是“取产品的最低 16 位应该是 存储在产品中,完整的产品应该作为 32 位值存储在 full_product 中。”方法中注释掉的行是为了告诉你什么不能做。谢谢!这是用 C 完成的代码
#include "alu.h"
/* Adds the two arguments and stores the sum in the return structure's result
* field. If the operation overflowed then the overflow flag is set. */
addition_subtraction_result add(uint16_t augend, uint16_t addend) {
addition_subtraction_result addition;
while (addend != 0){
int carry = augend & addend;
augend = augend ^ addend;
addend = carry << 1;
}
addition.result = augend;
//addition.overflow = false;
return addition;
}
/* Subtracts the second argument from the first, stores the difference in the
* return structure's result field. If the operation overflowed then the
* overflow flag is set. */
addition_subtraction_result subtract(uint16_t menuend, uint16_t subtrahend) {
addition_subtraction_result subtraction;
while (subtrahend != 0 ){
int borrow = (~menuend) & subtrahend;
menuend = menuend ^ subtrahend;
subtrahend = borrow << 1;
}
subtraction.result = menuend;
return subtraction;
}
/* Multiplies the two arguments. The function stores lowest 16 bits of the
* product in the return structure's product field and the full 32-bit product
* in the full_product field. If the product doesn't fit in the 16-bit
* product field then the overflow flag is set. */
multiplication_result multiply(uint16_t multiplicand, uint16_t multiplier) {
multiplication_result multiplication;
//multiplication.product = multiplicand * multiplier; // THIS IS DISALLOWED
//multiplication.full_product = multiplicand * multiplier; // THIS IS DISALLOWED
multiplication.product = multiplicand;
multiplication.full_product = multiplicand;
return multiplication;
}
【问题讨论】:
-
提示:乘法是重复加法。
-
“我尝试了将两个整数相乘的乘法方法,但似乎没有任何进展” --> 如果您至少发布了其中一个,这将很有用。
标签: c unsigned-integer