继续我之前的问题 Why I cannot derive from long?
我发现了一个有趣的问题。
第一步:
4294967296 & 0xFFFFFFFF00000000
结果:4294967296。
第二步。
4294967296 & 0x00000000FFFFFFFF
结果:0
啊哈,所以我在这里假设4294967296 == 0xFFFFFFFF
我们来看看
(long)0x00000000FFFFFFFF
结果:4294967295。失败。
让我们仔细检查
4294967296 >> 32
结果:1。失败。
唯一的解释是,因为我在很长的地方使用 有些是为标志保留的。在C中我会使用unsigned long。 你觉得怎么样?
答案 0 :(得分:5)
4294967296 & 0xFFFFFFFF00000000 = 4294967296
这表示值4294967296在低32位中没有设置位。实际上,4294967296是0x100000000,所以这是真的。
4294967296 >> 32 = 1
再次,一致。
换句话说,4294967296为0xFFFFFFFF的结论是错误的,所以剩下的检查不支持这个。
答案 1 :(得分:3)
0x0000000100000000 &
0x00000000FFFFFFFF =
0x0000000000000000
0x0000000100000000 &
0xFFFFFFFF00000000 =
0x0000000100000000
这两者都很有道理。也许你误解了一个按位AND ...它映射了两者中相同的位。您的注释似乎更适合按位异或而不是按位AND(这不是您正在使用的操作)...
答案 2 :(得分:1)
我认为您无法理解按位and
操作。按位and
将返回两者中设置的位。如果两者相同那么
(4294967296 & 0xFFFFFFFF00000000) == 4294967296
和
(4294967296 & 0xFFFFFFFF00000000) == 0xFFFFFFFF00000000
都会坚持,但他们显然不会。