【问题标题】:C language What this code mean ? if(button & 1)==1 [closed]C语言这段代码是什么意思?如果(按钮和 1)==1 [关闭]
【发布时间】:2013-05-23 10:22:31
【问题描述】:

我对此感到困惑.. 那是什么意思。 这段代码会做什么..

if((button & 1)==1)

我已经尝试在网上搜索它,但我找不到一个好的答案..
提前谢谢..

【问题讨论】:

  • 搜索“位掩码”。
  • 了解位运算符。
  • 我不敢相信在谷歌上搜索operators in C很难......
  • 按钮可能是一个标志。如果按钮为 0,则 (0 & 1) == 1 为假。如果按钮为 1,则 (1 & 1) == 1 为真。如果按钮为 2,则 (2 & 1) == 1 为假。
  • @series0ne 事实上我相信按钮是一个整数,这段代码检查它是否是奇数。

标签: c


【解决方案1】:

按位AND 运算符(&) 将第一个操作数的每个位与第二个操作数的相应位进行比较。如果两个位都为 1,则相应的结果位设置为 1。否则,相应的结果位设置为 0。 因此,如果 (button & 1) 为 1,则 if(button & 1)==1 评估 true 否则评估为 false

【讨论】:

  • 如果button == 3 会怎样?任何奇数都将返回 true;
  • 因为 3 的按位表示是 0011,1 是 0001。& 运算符将执行 & 操作,结果是 0001,即十进制形式的 1。所以对于 button=3 if((button & 1)= = 1) 即 if(1==1) 将评估为 true....如果您对我的答案投了反对票,请提供适当的理由,以便我改进我的答案。
  • "所以如果 button 为 1,那么 if(button & 1)==1 评估为 true,否则评估为 false。"。你刚才的解释正好相反。
  • 这有什么问题?好的。。编辑了我的答案
  • 你说如果button是1,它评估为true,否则评估为false,但是“否则”,包括3和任何其他奇数,都将评估为true。更新了我的投票,但我认为您的评论是更好的答案。
【解决方案2】:

这 if 对 button 和 1 的值执行 按位“与”,然后将结果与 0 进行比较。本质上,当且仅当 last( button 的最低有效位)也相当于 button 是奇数。

简而言之,这个 if 检查 button 是否为奇数。

【讨论】:

  • 我已经在 C# 中对此进行了测试,是的,这可以测试数字是否为奇数...现在我要更新我的 IsOdd() 函数 :-)
  • 只是出于好奇,为什么 (button & 1) == 1 而不是 (button % 2) != 0,它们的效果是一样的,不是吗?
  • @series0ne 是的,我相信它具有相同的效果。没有真正的理由为什么人们更喜欢第一个版本,而且我相信很多编译器会优化这两个版本来做同样的事情。恕我直言,这是一种简单的方法,可以让一个人看起来更聪明。
【解决方案3】:

& 运算符是按位与,因此此代码检查是否设置了按钮中的最低位。

通常,为了在查看更高位时具有一致的风格,我们会与 0 进行比较。

【讨论】:

    【解决方案4】:

    它检查是否设置了最低位..换句话说,button 是偶数还是奇数..

    即使这个if(button & 1) wolud 也做了同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      相关资源
      最近更新 更多