我需要使用不带循环等的按位运算符将 int 乘以分数。
例如,我需要将 x 乘以 3/8。
我以为你会:
int value = (x << 1) + x; // Multiply by 3
value = (value >> 3); // Divide by 8
但这行不通。我尝试用谷歌搜索二进制乘分数,但给出了浮点示例。我不确定这个作业是否是针对浮点的,但我的预感是不是,但让我为此做好准备。那么有什么建议吗?
我需要四舍五入到零,所以有什么建议吗?这不适用于数字 -268435457。
最佳答案
你可能想要
int value = (x << 1) + x;
value = (value >> 3);
请注意:
(x << 1) + 1 = 2*x + 1; // ignoring issues about overflow
要调整负值,您可以显式检查符号:
int value = (x << 1) + x;
value = value >> 3;
value = value + ((x >> 31) & 1); // for 32 bit; for 64 bit you have to use x >> 63
关于c - 如何将整数与分数相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356927/