2進数の0か1かの判定

タグの編集
投稿者 lever  (学生) 投稿日時 2009/5/18 09:53:34
シリアル通信で2進数を16Bit受信して任意のBitが0か1かの判定文を作りたいのですが、
ど素人なもので受信ができても判定の仕方がわかりません。

「0011010100000000」という数値が受信されたとして、9Bitめが0か1かの判定結果によって
ある動作をするみたいな感じです。

もしよろしかったら教えてください、お願いします。
投稿者 太郎冠者  (社会人) 投稿日時 2009/5/18 10:58:08
9bit目ってどっちから?
右からなら
0000001000000000
でマスク(AND演算)すればいいよ。
マスクした結果(0か1)がそのまま「9Bitめが0か1か」になるから。
逆なら「1」の場所をずらしてね。

詳しく知りたかったら「ビット演算」でググってみてよ。
投稿者 太郎冠者  (社会人) 投稿日時 2009/5/18 10:59:39
あれ、ずれてる。
× 0000001000000000
○ 0000000100000000
投稿者 ヴァン  (社会人) 投稿日時 2009/5/19 05:06:54
シリアル受信との事ですが、lsbファーストでしょうか?
また、データは文字列でしょうか?

シリアルで受信したデータなので文字列と仮定しちゃいますね。
左側からなら、n番目(ビットの位置)を SubString で1文字取り出せば良いと思います。
右側からなら、長さ-1からn番目を SubString で1文字取り出せば良いと思います。
投稿者 lever  (学生) 投稿日時 2009/5/19 08:05:48
太郎冠者さん、ヴァンさん、返信ありがとうございます。

受信したデータは、送信した機器から見れば2進数を送っているはずです。(送信機器:三●電機PLC)
それと下位ビット先です。

受信したデータは
 Dim strData As String = Convert.ToString(ivalue, 2).ToUpper()
というかんじで2進数に変換しております。

早速2通りとも試してみたいと思います。これからもアドバイスをよろしくお願いします。