Renesas Synergy™

FAQ 1011878 : unsigned char型の変数のビット反転した結果(CC-RL)

Q : 質問

RL78コンパイラCC-RLを使用しています。 次のように、unsigned char型の変数のビット反転した結果を比較しているのですが、期待通りの動作をしません。

(例)
volatile unsigned char val0 = 0xdd;
volatile unsigned char val1 = 0x22;
volatile unsigned char res;

if ( val0 == ~val1B ){
  res = 1;
}

 ( val0 == ~val1B )の結果はTrueにならないのでしょうか?

 


A : 回答

CC-RLでは、汎整数拡張により、unsigned char型は、int型に拡張されて演算されます。
そのため、val1の0x22の値をビット反転した結果は、0xffddとなるため、val0の値0xddと異なるため条件式が偽となっています。
次のようにすることにより1バイトの値の比較が可能です。
(例1)ビット反転した結果を下位1バイトの値のみにする
if ( val0 == (~val1B & 0xff) ){
(例2)ビット反転した結果をキャストする
if ( val0 == (unsigned char)~val1B ){

適用製品

e² studio
CS+ (旧 CubeSuite+)
RL78ファミリ用Cコンパイラパッケージ
他にご質問がございましたら、リクエストを送信してください