我已經寫下面的代碼並執行它的碼塊IDE:移超出最大限制產生的週期序列
main()
{
unsigned char num=1;
unsigned char i=0;
for(i=0;i<255;i++)
{
printf("%d\n",num>>i);
}
}
輸出: 1,0,0,..(31 0的),1,0 ..(31 0's)
num的任何值都會生成一個週期性序列。
我知道轉移超出限制(mem size for num)是未定義的行爲,但它爲什麼是週期性的?
即使你左移
「我知道轉移超出限制(mem size for num)是未定義的行爲,但它爲什麼是週期性的?」你不覺得你的陳述是矛盾的嗎? – usr
Undefined =沒有特定的通用邏輯,Periodic =我可以放置一個邏輯說明它何時會重複 –
由於某些設備32位移位指令只接受右操作數的5位,所以'num >> i'將會是'num >> I&0x1F的)'。 – mch