1.请考虑以下内容:
unsigned int a, b;
b = a >> ((sizeof a) * CHAR_BIT);
/* or 2nd operand greater than ((sizeof a) * CHAR_BIT) */
这是定义的行为、未定义的行为还是实现相关的行为?
2. 另一个子问题:
如果 a
是 signed int
并且它的移位小于其位长度,那么在进行有符号位移时是实现定义还是未定义行为。 在以下两种情况下:
- 向右移位时:
a >> 5
- 向左移位时:
a << 5
编辑 问题已编辑