使用負數計數或超出型別寬度的位移位

如果換檔計數值為負值,左移右移操作均未定義 1

int x = 5 << -3; /* undefined */
int x = 5 >> -3; /* undefined */

如果對負值執行左移,則未定義: ****

int x = -5 << 3; /* undefined */

如果對正值執行左移並且數學值的結果在型別中無法表示,則它未定義 1 : **** ****

/* Assuming an int is 32-bits wide, the value '5 * 2^72' doesn't fit 
 * in an int. So, this is undefined. */
       
int x = 5 << 72;

需要注意的是右移一個負值 (.eg -5 >> 3)是不是不確定的,但實現定義

1 引用 ISO / IEC 9899:201x ,第 6.5.7 節:

如果右運算元的值為負或大於或等於提升的左運算元的寬度,則行為未定義。