掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
char型のビット演算について (ID:57724)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
初歩的なことですが少し教えて下さい。 ある処理ごとにフラグを立てて処理したいのですが、 n個の処理に対してn個のフラグ(変数)を用意するともったいないので、 char型を1つ用意し、各ビット毎をフラグと見なし、扱いたいと思いました。 switch (***) { case 条件1: flg |= 0x01; (0000 0001) break; case 条件2; flg |= 0x02; (0000 0010) break; case 条件3; flg |= 0x04; (0000 0100) ・ ・ ・ } ・ ・ if (flg & 0x01) 処理1 if (flg & 0x02) 処理2 if (flg & 0x04) 処理3 フラグを下げるときは flg &= 0xfe; (& 1111 1110) flg &= 0xfd; (& 1111 1101) と、いったかんじです。 いざ処理を実行すると・・・ プログラムが条件1を通過しただけなのに 処理1&処理2&処理3・・・が実行されてしまいます。 その後にcharをunsignedに変更してみるとうまくいきました。 char型では↑の処理では不具合があるのでしょうか? 実際に処理中の変数の中身をみてみると、思っている通りに flg |= 0x01; 結果:1 flg |= 0x02; 結果:2 にはなっているのですが・・・ 考え方自体が間違っているのでしょうか? この原因を教えて頂きたいです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.