【发布时间】:2020-06-03 15:01:34
【问题描述】:
我最近在一次采访中被问到,只使用位移运算符,编写一些代码来告诉你一个数字是否可以被 8 整除,显然代码很短 - 有人知道吗?
注意:如果您不需要使用移位,您可以使用x&7 == 0 之类的掩码或更一般地测试低 n 位是否为全零
x & ((1UL << n) - 1) == 0。 How can I tell if a number is a multiple of four using only the logic operator AND?
【问题讨论】:
-
提示,右移等同于除以2
-
@SteveKuo 在 C 中,仅适用于正整数
-
而 8 是 2 * 2 * 2 ;)
-
@ouah 有符号保持右移。我相信 C 语法是
num >>> 3。 -
@SergeyL。 - 那是 Java 语法。在 C 和 C++ 中,没有负值的符号保持右移;负数的右移具有实现定义的行为。
标签: bitwise-operators bit-shift