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コンパイラパッケージ |