【问题标题】:Is my masking correct我的屏蔽是否正确
【发布时间】:2017-08-22 22:18:09
【问题描述】:

什么意思

if ((readParameter - > type(0) & 0xff) == 0xff) {}

我知道当我们使用 oxff 执行 '&' 时,它会返回 LSB。但是再次使用 == 0xff 评估它意味着什么?

我觉得是这样的(例如):

 if ((00000000 00000000 00000000 11011001 & 00000000 00000000 00000000 11111111) == 00000000 00000000 00000000 11111111) 
   {
     //IF THEY ARE EQUAL IT ENTERS IN THE LOOP ? IN THIS CASE THEY ARE  NOT EQUAL
   }

请纠正我 如果我错了?

【问题讨论】:

  • (x & 0xff) == 0xff 为真当且仅当x 的最低有效字节为0xff。它回答了你的问题吗? (注意:括号不是必需的,但通常添加以明确& 不是&& 的错字并消除编译器警告)
  • 我知道当我们对某些东西执行 '&' 时,它会返回 LSB:不,这不是真的。 0xff & something 将返回 something 的 LSB,但 0x12 & something 不会。
  • 什么是1 & 0xFF42 & 0xFF255 & 0xFF 呢?那么对于N 的不同值,(N & 0xFF) == 0xFF 为您提供了什么?

标签: c++ operators bit-shift masking


【解决方案1】:

但是再次使用 == 0xff 评估它意味着什么?

if 检查最低有效字节是否等于 0xff。 readParameter->type(0) 返回的其余内容可能包含其他位集。如果它们没有被& 0xff 删除,那么与 0xff 的相等性可能永远不会成立。

我知道当我们对某事物执行 '&' 时,它会返回 LSB。

这是不正确的,当您使用二进制按位 AND 时,结果取决于操作中使用的参数。如果你 & 使用 0xff 那么你将获得最低有效字节,但如果你使用 (ui32value & 0xff000000) >> 24 那么你将读取最高有效字节。

【讨论】:

    【解决方案2】:

    过滤操作的结果(& 0xff)与掩码本身进行比较,检查参数的最后8位是否都等于1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多