うちのカレーにはこれが入ってる!って食材ありますか?

大抵の言語では数値の(ディスプレイへの)出力において、
8進数・10進数・16進数で表示できますが
2進数での数値の出力は対応していないと思います。
そこで、2進数表現での一桁を16進数で表すことにしました。
8bitの2進数を32bitの16進数で表すわけです。

例:x=0xAC → 0x10101100
(((x&0x80)<<21)|((x&0x40)<<18)|
((x&0x20)<<15)|((x&0x10)<<12)|
((x&0x08)<<9)|((x&0x04)<<6)|
((x&0x02)<<3)|(x&0x01))

ここで質問なのですが、
10進表現での1桁を4桁の2進数で表したものが、「2進化10進数」
では、上記のような表現方法は「16進化2進数」と呼んでも差し支えないのでしょうか?
英語だとHexadecimal-coded binary "HCB"でしょうか?

呼び名に誤りがあれば、なんと呼んだらしっくりくるでしょう?

A 回答 (7件)

う~ん, 「16進数で表す」というのが, ちょっと曖昧なんですよね....


最初に書いたことと関連するんですが, 例えば 2進数の 10110110 を B6 とするのも「2進数を 16進数で表す」と言えますよね. ですが, これは明らかに期待する動作ではありません. ということで, 「16進数」という表現は避けた方がいいかなぁと思いまして....
そう考えたときに, ちょうど「4ビット = 1ニブル」という表現があるので, こっちを使った方が安全ではないかと判断しました.
    • good
    • 0
この回答へのお礼

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

そうですよね。
そもそも、「16進数で・・・」というのが質問の意図及び呼び方に関して多くの誤解を与えてる気がします。
ご指摘の通りです。
1ビットを1ニブルで表現する。と言えば誤解を招くような事は無いと思います。

このような分かりにくい質問にお付き合いくださり大変感謝しております。
あらためて、お礼申し上げます。
ありがとうございました。

お礼日時:2008/12/13 22:39

ちょっと思ったのが bit-to-nibble expansion.


nibble ってあまり使われないけど「4ビット」の意味があります. だからこれで「1ビットから 4ビットへの拡張」と読ませることはできます.
    • good
    • 0
この回答へのお礼

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

出来ることなら「16進数で表される」といった意味も含まれると
分かりやすいと思いましたが、
1ビットを4ビットへ、と云うのはなかなかいい表現です。

参考にさせていただきます。

お礼日時:2008/12/11 17:06

あぁ, 計算式については完全に私の勘違いです. 申し訳ありません.


ただ, この処理って必要なのかなぁ? 「16進で表現できればその時点で十分」じゃないのかな?

この回答への補足

上手く説明できるか分かりませんが
実用性はあまりないです。
ただ、勉強用に使ったり確認用に使ったりします。
例えばアセンブリのコードが機械語に変換されたときに
どのビットが何を表しているのかを視覚的に捕らえる場合や
複雑なビット演算をした場合にビットの変化を目で追って理解したい場合
2色BITMAPやフォントのグリフなんかをコンソールで表示したり
バイト単位で意味のあるデータではなくビット単位で意味を持つデータの確認のために使います。

補足日時:2008/12/11 16:51
    • good
    • 0

世界で、現在も使い続けられているCOBOLでは、


「PIC 1(n)」
というデータ型があります。

「PIC 1(8) BIT」なら、8ビットのことです。
「PIC 1(8)」なら8バイトで、2進数の1桁を1バイトで表します。
    • good
    • 0

数値を二進記数法で出力する関数とかなら


大抵の言語で簡単に作れるだろうから、
わざわざそういう形式を経由する必要性は感じないですね。
手間が余計に掛かるだけですし、何か工夫しないと表現できるビット数が1/4になってしまうし。

でも、数値リテラルを二進記数法で書きたいと思うことならたまにあるかな。
(rubyとかだと2進整数リテラルが使える。)

この回答への補足

手間でしょうか?
マクロにして、ちょこっと2進数で表示して見たいとき簡単に使えますよ。

#define nantoka(x) ・・・
printf("%.8X\n", nantoka(0xAC));

out>10101100

loopも関数も使わない一番手軽な方法だと思ってます。
出力系の関数にも簡単に渡せますしね。

で、呼び名が欲しいのですよ。

補足日時:2008/12/10 21:59
    • good
    • 0

たぶん, あまり顧みられる方法ではないので名前自体存在しないと思います. だから極論すれば「言った者勝ち」でしょう. 「ここでは Hexadecimal-coded binary と呼ぶんだ」といってしまえば勝ち. まあ, 16進数と 2進数は「同じもの」だという指摘を受けるかもしれませんが.


「しっくりくる呼び方」という点では, 「各ビットを 1ニブルであらわした」というとしっくりくるけど, 全然スマートじゃないし....
なお, この式が間違っていることは実際に確かめればわかります. もっと言うとシフト量が間違ってます.
    • good
    • 0
この回答へのお礼

解答ありがとうございます。
名前自体ないのは重々承知しています。
ただ、言葉で説明するとなると長ったらしくなり
上手い表現が浮かばないのです。
2進表現で表示する方法、だけだと説明不足ですし
16進数を使って・・・などというと仰るとおり16進数と2進数は同じものなのでなんとも表しにくいわけです。
自分だけが分かるように名前をつければいいのでしょうけれど、暫くたつと何のコードだか分からなくなりそうなので、名前が欲しいのです。

式が間違っているとの指摘ですが・・・ちゃんと紙に書いてやってみましたよ。
実際にやっても間違いはありませんし。

お礼日時:2008/12/10 21:58

そのようなことをする必要性が思いつかなかった....


BCD には「2進数や 16進数は直感的に 10進数として考えるのが難しい」という点で存在意義があるけど, 「16進数で書いてあるものを 2進数で読み直すのは簡単」なんだから, こんなことをする理由が良く分からないです.
ところで, その変換式は間違ってますね.

この回答への補足

必要性といわれれば、単純にディスプレイに2進数を描画したい。
と、云う事のみであって他に使い道はありません。
2色のBITMAPを0と1で出力したり、ビット演算の結果の確認をしたり、
といったような使い方をします。
仰るとおり「10進数を2進数で読み直すのは簡単」ですが、
より視覚的に表現したいと思っただけです。

変換式が間違っているとはどういうことなのかわかりません。
上位のビットから論理積で取った値をシフトしてるだけです。

と、云った事は本当はどうでも良くて、呼び名に間違いがあるのかどうか、間違っているならなんと呼んだらしっくりくるのかと云うのが知りたいだけでして。

補足日時:2008/12/10 10:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報