2016-10-07 3 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)

任意の値numは、定期的なシーケンスを生成します。

制限を超えてシフトすることはわかりませんが、それはなぜ定期的なのですか?

周期系列は、あなたはそれが未定義の動作の可能な症状だから定期的なことが許されます

+0

"限界を超えてシフトすることはわかりませんが、それはなぜ定期的なのですか?"あなたの声明は矛盾していると思いませんか? – usr

+0

未定義=特定のユニバーサルロジックがない、Periodic =繰り返すときの論理を置くことができる –

+1

assember 32ビットシフト命令の中には、右オペランドに5ビットしか受け入れないので、 'num >> i'は' num >>私と&0x1F) '。 – mch

答えて

4

を左シフトしても生成されます。

それに頼らないでください。

+0

私は多くのコンパイラで試して..すべての定期的なシーケンスを与えた –

+1

私はちょうど私の上でそれを試してみました。コンパイラはちょうど私の猫を食べようとした。 (私は今、コンパイラベンダーを切り替えることを考えていますが);-)) – Bathsheba

+0

ワットは出力されましたか? –

関連する問題