【发布时间】:2020-02-25 12:55:43
【问题描述】:
我想检查我的数组的第 4 个字节是否等于以下任何一个:0xe0 0xe1 0xe2 0xe3 0xe4 0xe5 0xe6 0xe7 0xe8 0xe9 0xeA 0xeB 0xeC 0xeD 0xeE 0xeF。 我的朋友告诉我使用语句 (array[3] & 0xf0) == 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 检查该值。
【讨论】: