16進数・2進数・&・|・フラグの扱い

  16進数・10進数・8進数・2進数相互変換

Windows の付属の「電卓」を使用します(calc.exe)。表示メニューより「関数電卓」を選択して下さい




  8・4・2・1



84218421
10101010

上記データは1バイトを表していますが、2進数では 10101010 になります。
ビットが ON になっている場所のタイトルを足すと上位・下位ともに10進数で 10 になります。

つまり、16進数では AA となる事を示しています

この方法を使用すると、16進数を2進数に変換するのにノートと鉛筆だけでもさほど難しい作業ではありません

C7
84218421
11000111



  スイッチ

1バイトは「スイッチ」が8つあるデータと考える事ができます

1) 0x01
2) 0x02
3) 0x04
4) 0x08
5) 0x10
6) 0x20
7) 0x40
8) 0x80

この事を利用して、C 言語では以下のようなオプションに利用しています

  
#define TYPE_A 0x01
#define TYPE_B 0x02
#define TYPE_C 0x04
#define TYPE_D 0x08
#define TYPE_X 0x10
#define TYPE_Y 0x20
#define TYPE_Z 0x40
#define TYPE_SP 0x80

// TYPE_A と TYPE_X のオプション
func( TYPE_A | TYPE_X );
  

  
TYPE_A | TYPE_B | TYPE_C | TYPE_D は 0x0f になります。
TYPE_A | TYPE_X は 0x11 です。

それぞれのスイッチ単位に処理を行なう為に関数側では以下のように処理します

void func( char Type )
{
	if ( Type & TYPE_A ) {
		printf( "A\n" );
	}
	if ( Type & TYPE_B ) {
		printf( "B\n" );
	}
	if ( Type & TYPE_C ) {
		printf( "C\n" );
	}
	if ( Type & TYPE_D ) {
		printf( "D\n" );
	}
	if ( Type & TYPE_X ) {
		printf( "X\n" );
	}
	if ( Type & TYPE_Y ) {
		printf( "Y\n" );
	}
	if ( Type & TYPE_Z ) {
		printf( "Z\n" );
	}
	if ( Type & TYPE_SP ) {
		printf( "SP\n" );
	}
}
  

0x11 & TYPE_Aを以下に示します

000100010x11
00000001TYPE_A
000000010x11 & TYPE_A

サンプルコード










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ