スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

nビット目の値

課題
ビットの話なので2進数で表現する。
例えばa,b,c,d,e,f,g,hを0または1の文字として2進数abcdefghという1バイト(8ビット)の値があるとする。
これの上位(上の桁、つまり左)から0から数えてn番目が0か1か調べる方法について考えてみる。
nは0から7の値である。


方法
なぜかC言語って頑なに2進数をサポートしないんだよな。
まあ下位互換性とか考えると仕方ないけど。
説明が面倒なので変数宣言など省略し、2進数が使える前提で書く。

data0 = 2進数abcdefgh;

説明のため仮にnは3とする。
n番目は、dの位置になる。

n = 3;

data1 = data0 >> (7-n);

これで、
data1 = 2進数0000abcd;
となる。

つまりdの右にある不要なefghを削除したわけ。

data2 = data1 & 1;

これは
2進数0000abcd
AND 2進数00000001
2進数0000000d
ということになる。

data2がdata0のnビット目の値である。

おまけ
なぜかC言語って頑なに2進数をサポートしないんだよな。
まあ下位互換性とか考えると仕方ないけど。
説明が面倒なので変数宣言など省略し、2進数が使える前提で書く。

data0 = 2進数abcdefgh;

説明のため仮にnは3とする。
n番目は、dの位置になる。

n = 3;

data1 = 1 << (7-n);

これで、
data1 = 2進数00010000;
となる。

data2 = data0 & data1;

これは
2進数abcdefgh
AND 2進数00010000
2進数000d0000
ということになる。

dが0ならばdata2は2進数00000000、つまり0だ。
dが1ならばdata2は2進数00010000、つまり0以外だ。

1ではなく0以外なので、data2を計算に利用できないが、
if(data2 == 0) {
data0のnビット目が0のときにおこなう処理
} else {
data0のnビット目が1のときにおこなう処理
}
という目的でつかうならok。
  1. 2009/01/31(土) 10:23:17|
  2. Win/C++
  3. | コメント:1
<<Microsoft Word 2002/2003 | ホーム | ハードディスクがうるせー>>

コメント

承認待ちコメント

このコメントは管理者の承認待ちです
  1. 2009/02/01(日) 00:14:58 |
  2. |
  3. #
  4. [ 編集]

コメントの投稿


管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。