为什么〜0xF等于0xFFFFFFF0?
另外,~0xF && 0x01 = 1
怎么样?也许我也没有得到0x01。
最佳答案
问题1
首先,这意味着您要在32位计算机上运行它。这意味着0xF实际上是hexadecimal中的0x0000000F
,
这意味着0xF为
二进制格式的0000 0000 0000 0000 0000 0000 0000 1111
。~
运算符表示NOT操作。 Tt在二进制表示中每0变1和每1变0。那将使〜0xF为:
二进制格式的1111 1111 1111 1111 1111 1111 1111 0000
。
那实际上是0xFFFFFFF0
。
请注意,如果在16位计算机上执行此操作,~0xF
的答案将是0xFFF0
。
问题2
您写错了声明,应该是0xF & 0x1
。请注意,0x1
0x01
,0x001
和0x0001
都相同。因此,让我们将此十六进制数更改为二进制表示形式:0xF
为:0000 0000 0000 0000 0000 0000 0000 1111
和0x1
将是:0000 0000 0000 0000 0000 0000 0000 0001
&
操作遵循以下规则:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
因此,做到这一点,您会得到以下结果:
0000 0000 0000 0000 0000 0000 0000 0001
实际上是
0x1
。其他
|
表示按位或运算。它跟随:0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
^
表示按位XOR运算。它跟随:0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
您可以获取更多信息here。
关于c - 为什么在32位计算机上〜0xF等于0xFFFFFFF0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12398889/