为什么32位机器上的~0xF等于0xFFFFFFF0?

seb*_*ebi 5 c operators

为什么~0xF等于0xFFFFFFF0?

还有,怎么样~0xF && 0x01 = 1?也许我也没有得到0x01.

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,0x0010x0001都是相同的.所以让我们将这个十六进制数改为二进制表示:

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)

您可以在此处获取更多信息.