This question already has answers here:
In C bits, multiply by 3 and divide by 16
(5 个回答)
7年前关闭。
我需要将一个数字乘以 3/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