问题
Suppose we have some variables x and y, and the following if statement which involves bit shifting:
if (x<<y)
I've read some posts which also deal with the issue of using bit shifting with variables (of some type) and inside if statement, but unfortunately I haven't been able to reach a unequivocal conclusion whether it is an error or not.
I assume that if it is an error, then it's a semantic error or a run-time error .
But is it necessarily en error ?
回答1:
If x
is of an unsigned integer type that is at least as large as unsigned int
, and y
is less than the number of bits in x
's type, then the above partial statement will test whether bits in x
that aren't in the top y
are set. The C89 Standard would require that implementations behave likewise if x
is of a signed type or a small unsigned type, with the caveat that setting the top bit of a small signed type is regarded as setting all bits beyond. The C99 and later standards, however, wouldn't require that implementations usefully process any situation in which x
is non-zero but the expression x<<y
would yield zero, unless x
is an unsigned integer type at least as large as unsigned int
.
回答2:
It's not a syntactic error. if
expects a parenthesized expression. (int_x<<int_y)
satisfies that. The shift expression may cause a runtime error, but only if the particular values of int_x
and int_y
invoke undefined behavior (see 6.5.7 for when that might happen).
来源:https://stackoverflow.com/questions/57103312/using-bit-shifting-variables-inside-if-statement-error-or-not