This question already has answers here:
In C bits, multiply by 3 and divide by 16

(5 个回答)


7年前关闭。




我需要将一个数字乘以 3/16, 只使用 ! ~ & ^ | + << >> 等按位运算将 舍入为零。到目前为止,我有以下内容,唯一的问题是当数字为负时它不起作用,它总是向下舍入而不是零。我知道应该有按位 if 语句,如果 x 为负则加 15。但我不知道如何实现它,任何帮助表示赞赏。
int ezThreeSixteenths(int x) {
    int times_two = x << 1;
    int times_three = times_two + x;
    int divide_eight = times_three >> 4;
    int a = 0b11111111;
    int a1 = a << 8;
    int a2 = a << 16;
    int a3 = 0b11111 << 24;
    int mask = a | a1 | a2 | a3;
    int final = divide_eight & mask;
    return final;
}

最佳答案

如果你有一个你满意的函数,当它是正的时,测试 MSB 来检测一个负位,如果是,取二进制补码(你没有说你是否可以使用 -+ 但你可以使用 ^+ ),运行您的函数,然后再次取二进制补码。

关于c - 如何乘以六分之三,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22176910/

10-11 18:02