C言語なら、オレに聞け! <2>

このエントリーをはてなブックマークに追加
828デフォルトの名無しさん
>>827
マクロでいいんでは。#define B00010010 0x12 とか。
829827:2001/05/07(月) 22:24
0x12のところは、人手ではなく、自動でやらせたいです。
どうすればよいでしょう?
830通りすがり:2001/05/07(月) 22:43
>>829
とりあえず8進表記にして、シフト演算と論理演算で2進数に変換すれば?
例えば、話を簡単にするために2桁にすると、

#define B(n) ((0##n>>2)&2|(0##n&1))

のようにすれば、B(00), B(01), B(10), B(11)という書き方で2進数が使える
ようになるよ。8進数にするのは少しでも桁数を多く使えるようにするため。
もちろん使い方を間違って、B(12)とかしてもエラーにならないので危険だけど。
831デフォルトの名無しさん:2001/05/07(月) 22:44
>>829
自動的に
#define B00000000 0x0
#define B00000001 0x1
#define B00000010 0x2
#define B00000011 0x3
 :
 :
というヘッダファイルを出力するプログラムを書いて、それをincludeする。
832827:2001/05/07(月) 22:51
うーん。830,831とも なかなかおもしろいですが、
実は32bitくらいの2進数を書きたいんです。^^;)

無理かなぁ。
833デフォルトの名無しさん:2001/05/07(月) 22:59
>>832
 別に831のやり方でいいんじゃない?(藁
ほんの120Gのinclude fileで
834通りすがり:2001/05/07(月) 23:02
>>832
830の方法だとニブル単位かバイト単位に区切って引数を渡すしかないですね。
B(10000000,10101000,00110000,00000001)という感じで。むしろこの方が
見やすいかも。
831の方法の場合、翻訳限界さえ許せば原理的には何ビットでもできそうだけど、
すごいヘッダファイルになりますね。