【发布时间】:2011-11-13 11:45:36
【问题描述】:
我需要使用不带循环等的按位运算符将 int 乘以分数。
例如,我需要将 x 乘以 3/8。
我以为你会:
int value = (x << 1) + x; // Multiply by 3
value = (value >> 3); // Divide by 8
但这不起作用。我尝试使用谷歌搜索二进制时间分数,但给出了浮点示例。我不确切知道这个作业是否适用于浮点,但我的预感不是,但让我为它做好准备。那么有什么建议吗?
我需要向零舍入,有什么建议吗?这不适用于号码 -268435457。
【问题讨论】:
-
你是说更新后的代码还是不行?
x是 int 吗?另外,您尝试过的x的值是多少以及生成的value -
这还是不行吗?!您从下面的解决方案中进行了编辑,看起来像...
-
解决方案向上而不是向下舍入,朝向 0。
标签: c binary logic bit-manipulation