【问题标题】:Confused with a statement对声明感到困惑
【发布时间】: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。 这可行,但我实际上无法理解为什么。

【问题讨论】:

标签: arrays hex byte


【解决方案1】:

请记住,对于按位与 (&) 运算,只有当操作数的两个对应位都等于 1 时,结果的第 N 位才等于 1。

所以 &-ing 0xf0 到第 4 个字节 (array[3]) 的值基本上用 0 替换了该字节的最低半部分,而最高的部分保持不变。

 1010  1010
 &
 1111  0000
 ====  ====
 1010  0000
 ^^^^  ^^^^ 
  ||    ||
as is  zeroed

现在剩下的就是对照0xe0 检查该值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多