she*_*ngy 16
问题1
为什么~0xF等于0xFFFFFFF0?
首先,这意味着您在32位计算机上运行它.这意味着0xF实际上0x0000000F是十六进制的,
这意味着0xF是
0000 0000 0000 0000 0000 0000 0000 1111二进制表示.
该~运营商表示不操作.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
Run Code Online (Sandbox Code Playgroud)
所以这样做,你会得到结果:
0000 0000 0000 0000 0000 0000 0000 0001
这实际上是0x1.
额外
|表示按位OR运算.它跟随:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
Run Code Online (Sandbox Code Playgroud)
^表示按位异或操作.它跟随:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Run Code Online (Sandbox Code Playgroud)
您可以在此处获取更多信息.