【问题标题】:Don't understand why result is one不明白为什么结果是一
【发布时间】:2016-03-27 19:02:03
【问题描述】:

我必须创建一个函数,它可以被赋予一个最多 32 位的 int。如果奇数位为 1,则应该返回 1,否则返回 0。我知道如果它与掩码不匹配,它会返回零,但我不明白为什么如果它与掩码匹配它会返回一。是不是因为 & 比较后结果不等于 0,所以返回 true 是 1?

int any_odd_one(unsigned x)
{

return (x&0xAAAAAAAA)!=0;

【问题讨论】:

  • 你是说它不起作用,还是你不明白它为什么起作用? C 中布尔表达式的结果是01& 不是“比较”,它是按位掩码。比较在!=
  • 它有效,但我不确定它为什么返回 1。感谢您回答我的问题。

标签: c bitmask


【解决方案1】:

& 是按位与运算符,它的工作原理是从左侧参数中获取一个位,从右侧参数中获取相同的位,对它们进行“与”运算,然后将结果保存为位结果。它对每一点都这样做。

因为当两个参数都是'1'时'and'的结果只能是'1',所以使用0xAAAAAAAA作为一个参数与将第二个参数的每个偶数位设置为'0'的效果相同,并保留所有奇数位。

如果上面的结果是'0',那意味着所有奇数位都是'0'。

还请记住,当整数转换为布尔值时,除 '0' 以外的任何值都会转换为 true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2021-08-31
    • 1970-01-01
    • 2020-12-31
    相关资源
    最近更新 更多