[[20141114123743]] 『16bitで管理された値の3bitを取得』(ひろみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『16bitで管理された値の3bitを取得』(ひろみ)

あるデータで、16bitで管理され3bitの値を取得しなければなりません。
元データは、10進数に変換された値になっています。

元データの値は、
8
28
12
84
となっています。

この、3bitが 0または1かを関数で取りたいのです。

エクセル関数のDEC2HEXを使用しますが、これから先がわかりません。

進数やbitが門外漢でほとんど理解がありません。

計算にあたり必要な行程を教えて頂きたく投稿いたしました。
よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 3 ビット目という意味でしょうか。

 2010 なら
 =LEFT(RIGHT("000" & DEC2BIN(A1),3)),1)
 でどうでしょうか。

 2013 なら BITAND で
 =BITAND(A1,4)/4

 などともできそうです。
(Mook) 2014/11/14(金) 12:54

=LEFT(RIGHT("00"&DEC2BIN(A1),3),1)
(???) 2014/11/14(金) 13:16

「門外漢」というのはご謙遜だとは思いますが、字義どおり門外漢の方と仮定して・・・。

10進数は0〜9の10種類の数字で数値を表します。
2進数では0と1だけで数値を表します。

まずは10進数の考え方を簡単に説明するために123という数値を例にとってみます。
123をあえて分解すると
 123 = 10^2*1 + 10^1*2 + 10^0*3
と表すことができますね(『10^2』とは10の2乗という意味)。
つまり123は10^2の位が1、10^1の位が2、10^0の位が3で表されていると理解してください。

さて123を2進数で表すとどうなるでしょう。
123=2^6*1 + 2^5*1 + 2^4*1 + 2^3*1 + 2^2*0 + 2^1*1 + 2^0*1
となります。
すなわち2^6の位が1、2^5の位が1、2^4の位が1、2^3の位が1、2^2の位が0、2^1の位が1、2^0の位が1
で表されます。すなわち10進数の123を2進数に変換すると1111011になると理解できると思います。

さてご質問にあったbitですが、この2進数の数値の桁数と思ってください。
「16bitで管理している」というのは2進数の16桁で管理していると解釈してください。

前述の2進数の1111011は7桁なので、16桁で管理するためには足りない9ケタを0で埋めた数列として管理します。
すなわち000000000111011という数列で管理していることになります(一応データの管理元に確認してくださいね)。

質問にあった「3bitの値を取得する」というのが上記000000000111011の上位から3桁目の数字なのか下位から3桁目の
数字なのかによって回答が異なってきますので、「3bitの値を取得する」を指示した方に確認した方がよいでしょう。

他にもWebで検索すればいろいろヒットしますのでそちらもご覧になってくださいね。
ではでは。

(ryopo^2) 2014/11/14(金) 13:37


ご回答ありがとうございます。

ご回答の部分に "000" と "00" の2パターンがあります。

3bitの部分の取得はどちらを使用すればよろしいのでしょうか?
(ひろみ) 2014/11/14(金) 13:55


ryopo^2 様ご回答ありがとうございます。

そのデータの資料を見ますと、ビット配列は以下のようになっておりました。
16 15 〜 3 2 1 

webでみてもなかなか理解がなく、高校で ビットは n二乗と習った程度のです。
(ひろみ) 2014/11/14(金) 13:59


尋ねる前に、試せば判ることです。
mookさんの例だと、括弧が1つ余分にみえたので、私の例を挙げました。

前ゼロを付加しているのは、例えば2という値は、DEC2BINすると、10 になります。2桁しかないので、
後ろから3bit目を取りだそうとすると桁が足りず失敗するので、010 に整形しているのです。

最小値 0 の場合、000 にするには、2つ0を付加すれば良いですね。とはいえ、3つでも4つでも
右側から3文字取り出せば、同じ結果になりますので、"00"付加でも"000"でもどちらでも構いません。
(0010 でも 00010 でも、右から3文字取り出せば 010)

Mookさんが"000"を足しているのは、もしDEC2BINが1文字も返さなかった場合でも破綻しないよう、
手堅いコーディングを行っているためと思います。

ついでに指摘。
>webでみてもなかなか理解がなく、高校で ビットは n二乗と習った程度のです。

これも試せば判るのですが、ビットは「2のn乗」です。2^0=1、2^1=2、2^2=4…。
0乗すると1になるので、最小ビットを0ビット目という場合と、1桁目だから1ビット目という場合があり、
誤判定の原因になりがちなので、要注意です。
(???) 2014/11/14(金) 14:36


皆様ありがとうございます。
大変勉強になりました。
エクセルも解決いたしました。
(ひろみ) 2014/11/14(金) 15:36

 16bitって言うのですから、7fff=32767まで計算できる とすると・・・、

 =NOT(ISEVEN(INT(A1/4)))*1

 参考程度に10進で百の位を 1の位まで桁下げするには、 100で割って小数点以下切捨てですよね
 10進数だから 10^2(100で割ります)

 2進数なら、2^2(4)で割ります。2^0桁が 偶数なら、0 奇数なら1 ですから上記の数式となります。

(ichinose ) 2014/11/14(金) 17:05


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.