【发布时间】:2016-01-31 13:47:55
【问题描述】:
好的,所以我知道通常左移和右移仅适用于值0..31。我在考虑如何最好地扩展它以包括 32,这简化了一些算法。我想出了:
int32 << n & (n-32) >> 5
这似乎有效。问题是,它是否保证可以在任何架构(C、C++、Java)上工作,是否可以更有效地完成?
【问题讨论】:
-
您是否考虑过移动 32 位,然后移动剩余的位置?
-
实际上确实包含32个。只有32个以上没有定义。
-
Java 规范提到如果左手操作数是 32 位,它只使用右手操作数的低 5 位,我相信 ANSI C 也是如此。
-
预期的结果是什么?一旦您更正了运算符优先级,所有这些都将为零。
标签: java c++ c bit-manipulation bit-shift