在 if 语句中使用移位变量 - 错误与否

using bit shifting variables inside if statement - error or not

假设我们有一些变量 x 和 y,以及以下涉及位移的 if 语句:

if (x<<y)

我已经阅读了一些帖子,这些帖子也处理了对(某种类型的)变量和 if 语句内部使用位移位的问题,但不幸的是,我无法得出明确的结论,这是否是一个错误与否。

我假设如果它是错误,那么它是语义错误或 运行-time 错误。

但这一定是错误的吗?

这不是语法错误。 if 需要带括号的表达式。 (int_x<<int_y) 满足。 shift 表达式可能会导致运行时错误,但前提是 int_xint_y 的特定值会调用未定义的行为(请参阅 6.5.7 了解何时可能发生)。

如果x是无符号整数类型,至少和unsigned int一样大,并且y小于x的位数' s 类型,那么上面的部分语句将测试是否设置了 x 不是 顶部 y 中的位。如果 x 是有符号类型或小型无符号类型,C89 标准将要求实现行为类似,但需要注意的是,设置小型有符号类型的最高位被视为设置所有超出的位。但是,C99 和更高版本的标准不要求实现有效地处理 x 是 non-zero 但表达式 x<<y 将产生零的任何情况,除非 x 是至少与 unsigned int.

一样大的无符号整数类型