1. 考慮以下幾點:是>>((sizeof a)* CHAR_BIT)定義,UB還是IDB?
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
EDIT
你可以在問題2中說明一些情況嗎? – phoxis
@phoxis:查看更新的答案。 –
@油查爾斯沃斯:優秀。我應該保留一份標準的副本,它的寫法如此清晰。非常感謝你的答案。 – phoxis