CLion "Expression can be simplified" 有关按位运算的消息
CLion "Expression can be simplified" message on bitwise operation
我正在做一个 C 项目,我写了下面一行来检查 int8_t 的最高有效位是否是 1:
if (f & 0b10000000 == 0b10000000) {
CLion 发出警告,告诉我 'Expression can be simplified to "f != 0"'
我说这是不正确的吗?我仔细阅读了按位运算以确定这些运算仍然不是等效的运算,例如 f = 1 会 return false 我的表达式,但这条消息让我怀疑自己。
感谢您的帮助!
按位 "and" 运算符 &
的优先级低于 ==
。
因此,您的表达式 if (f & 0b10000000 == 0b10000000)
等同于 if (f & (0b10000000 == 0b10000000))
。
如果您只想测试第 7 位,请尝试 if (f & 0b10000000)
。任何非零值都将被视为 "true".
此外,是的:CLion 是错误的。您的原始表达式等效于 if (f & 1)
,它测试位 0(可能不是您想要的)。
我正在做一个 C 项目,我写了下面一行来检查 int8_t 的最高有效位是否是 1:
if (f & 0b10000000 == 0b10000000) {
CLion 发出警告,告诉我 'Expression can be simplified to "f != 0"'
我说这是不正确的吗?我仔细阅读了按位运算以确定这些运算仍然不是等效的运算,例如 f = 1 会 return false 我的表达式,但这条消息让我怀疑自己。
感谢您的帮助!
按位 "and" 运算符 &
的优先级低于 ==
。
因此,您的表达式 if (f & 0b10000000 == 0b10000000)
等同于 if (f & (0b10000000 == 0b10000000))
。
如果您只想测试第 7 位,请尝试 if (f & 0b10000000)
。任何非零值都将被视为 "true".
此外,是的:CLion 是错误的。您的原始表达式等效于 if (f & 1)
,它测试位 0(可能不是您想要的)。