2016-10-07 48 views
1

我已經寫下面的代碼並執行它的碼塊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)是未定義的行爲,但它爲什麼是週期性的?

即使你左移

+0

「我知道轉移超出限制(mem size for num)是未定義的行爲,但它爲什麼是週期性的?」你不覺得你的陳述是矛盾的嗎? – usr

+0

Undefined =沒有特定的通用邏輯,Periodic =我可以放置一個邏輯說明它何時會重複 –

+1

由於某些設備32位移位指令只接受右操作數的5位,所以'num >> i'將會是'num >> I&0x1F的)'。 – mch

回答

4

它允許是週期性的,因爲那是未定義行爲可能表現的週期序列生成。

不要依賴它。

+0

..都給出了週期性的序列 –

+1

我剛剛嘗試過它。編譯器試圖吃我的貓。 (雖然我現在正在考慮切換編譯器供應商;-)) – Bathsheba

+0

Wat是你的輸出嗎? –