Renesas Synergy™

FAQ 1011876 : 変数のシフト演算の結果(CC-RL)

Q : 質問

RL78コンパイラCC-RLを使用しています。 unsigned long型の変数をシフト演算すると下記の動作をしています。

(例)

   val = 0x00000001 << x
   (xは0~31までです。)
   x=15の時、期待値は0x00008000ですが、実際の値は0xFFFF8000になっていました。
   また、x=16の時、期待値0x00010000に対し0x00000000になっていました。
   期待値通りの結果を得るためには、何か特殊な記述をしなければならないのでしょうか?

 


A : 回答

整数定数の末尾に、unsigned long型であることを示す接尾語”UL”を付加してください。

接尾語を付加していない場合の、0x00000001はint型となり、符号付きの16ビットになります。
x=15の時は、最上位ビットの符号ビットが1となるため、符号拡張されて、0xFFFF8000が代入されます。
x=16以上の時は、シフトにより16ビットの範囲を超えているため0x00000000が代入されます。

適用製品

e² studio
CS+ (旧 CubeSuite+)
RL78ファミリ用Cコンパイラパッケージ

 

他にご質問がございましたら、リクエストを送信してください