对一个陈述感到困惑
Confused with a statement
我想检查我的数组的第 4 个字节是否等于以下任何一个:0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xeA 0xeB 0xeC 0xeD 0xeE 0xeF。
我的朋友告诉我使用语句 (array[3] & 0xf0) == 0xe0。
这行得通,但我实际上不明白为什么。
请记住,按位与(&
)运算,只有当操作数的两个对应位都等于1时,结果的第N位才等于1。
所以 &-ing 0xf0
到第 4 个字节的值 (array[3]
) 基本上用 0 替换了该字节的最低一半,而最高的一个完好无损。
1010 1010
&
1111 0000
==== ====
1010 0000
^^^^ ^^^^
|| ||
as is zeroed
现在剩下的就是根据 0xe0
.
检查该值
我想检查我的数组的第 4 个字节是否等于以下任何一个:0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xeA 0xeB 0xeC 0xeD 0xeE 0xeF。 我的朋友告诉我使用语句 (array[3] & 0xf0) == 0xe0。 这行得通,但我实际上不明白为什么。
请记住,按位与(&
)运算,只有当操作数的两个对应位都等于1时,结果的第N位才等于1。
所以 &-ing 0xf0
到第 4 个字节的值 (array[3]
) 基本上用 0 替换了该字节的最低一半,而最高的一个完好无损。
1010 1010
&
1111 0000
==== ====
1010 0000
^^^^ ^^^^
|| ||
as is zeroed
现在剩下的就是根据 0xe0
.