c - 如何将整数与分数相乘

标签 c binary logic bit-manipulation

我需要使用不带循环等的按位运算符将 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/

相关文章:

c - 使用 switch - C 后简单程序崩溃

c - sizeof float (3.0) 与 (3.0f)

.net - 如何将注册表中的 REG_BINARY 值转换为字符串? (vb.net)

ios - 逻辑上确定最短路径

c - 我应该在哪个循环中放置打印功能?

c++ - 处理字符串时出现 super 奇怪的错误

java - 使用递归打印大小为 n 的所有二进制数

c - 将时间戳编码为最少的字符

c++ - 如何在 C++ 中将 10 位映射到 6 位(尽可能高效)?

c - 如何为 Tcl 编写异步 C 扩展?