Main Content

16 進数値と 2 進数値

数値は 16 進数値または 2 進数値として表現できます。コンテキストによっては、これらの数値表現のほうが便利な場合があります。たとえば、2 進数値を使用してハードウェア レジスタのビットを表現できます。MATLAB® には 16 進数値と 2 進数値の表現方法が 2 つあります。

  • "リテラル" として。R2019b 以降、適切な接頭辞を表記に使用して 16 進数値と 2 進数値をリテラルとして記述できます。たとえば、0x2A は 42 を指定するリテラルです。MATLAB はこれをテキスト "ではなく" 数値として保存します。

  • string または文字ベクトルとして。たとえば、文字ベクトル '2A' は数値 42 を 16 進数値で表しています。テキストを使用して 16 進数または 2 進数の値を表す場合は、引用符で囲みます。MATLAB はこの表現を数値ではなくテキストとして格納します。

MATLAB には、数値から 16 進数および 2 進数の表現への変換と、その逆の変換を行う関数がいくつか備わっています。

16 進数と 2 進数の表記を使用した整数の記述

16 進数リテラルは接頭辞 0x または 0X で始まり、2 進数リテラルは接頭辞 0b または 0B で始まります。MATLAB では、この表記法で記述された数値が整数として保存されます。たとえば、以下の 2 つのリテラルは、どちらも整数 42 を表します。

A = 0x2A
A = uint8
    42
B = 0b101010
B = uint8
    42

この表記を使用して数値を記述する場合、引用符は使用しないでください。16 進数の各桁を表すには、09AF、および af を使用します。2 進数の各桁を表すには、01 を使用します。

既定では、MATLAB はその数値を収めることができる最小の符号なし整数型として格納します。しかし、オプションの接尾辞を使用して、値を格納する整数の型を指定することができます。

  • 符号なし 8、16、32、64 ビットの整数型を指定するには、接尾辞 u8u16u32u64 を使用。

  • 符号付き 8、16、32、64 ビットの整数型を指定するには、接尾辞 s8s16s32s64 を使用。

たとえば、符号付き 32 ビット整数として格納される 16 進数リテラルを記述します。

A = 0x2As32
A = int32
    42

符号付き整数型を指定する場合、負の数値を表すリテラルを記述できます。負の数値は 2 の補数の形式で表します。たとえば、負の数値を接尾辞 s8 を使用したリテラルで指定します。

A = 0xFFs8
A = int8
    -1

MATLAB ではこうしたリテラルを数値として保存するため、これらは数値配列を使用する任意のコンテキストや関数で使用できます。たとえば、大きい整数で精度を低下させることなく、64 ビットの符号付き整数配列を作成できます。

C = [0xFF000000001F123As64 0x1234FFFFFFFFFFFs64]
C = 1x2 int64 row vector

   -72057594035891654    81997179153022975

対照的に、int64 を使用して大きい整数 (flintmax より大きい整数) の配列を変換すると、既定では MATLAB が最初に数値配列入力を倍精度として表すため、精度が低下することがあります。

C_inaccurate = int64([-72057594035891654 81997179153022975])
C_inaccurate = 1x2 int64 row vector

   -72057594035891656    81997179153022976

16 進数値と 2 進数値をテキストとして表現

整数は、関数 dec2hex と関数 dec2bin を使用して、これを 16 進数値または 2 進数値として表す文字ベクトルにも変換できます。整数を 16 進数に変換します。

hexStr = dec2hex(255)
hexStr = 
'FF'

整数を 2 進数に変換します。

binStr = dec2bin(16)
binStr = 
'10000'

これらの関数はテキストを生成するため、数値を表すテキストが必要な場合に使用します。たとえば、このような値をタイトルやプロット ラベルに追加したり、数値を 16 進数または 2 進数の表現として保存するファイルに書き込んだりできます。

16 進数値の配列をテキストとして表現

数値の配列をテキストに変換するには、関数 compose を使用する方法が推奨されます。この関数は、入力数値配列と同じサイズの string 配列を返します。16 進数形式を生成するには、%X を書式指定子に使用します。

A = [255 16 12 1024 137]
A = 1×5

         255          16          12        1024         137

hexStr = compose("%X",A)
hexStr = 1x5 string
    "FF"    "10"    "C"    "400"    "89"

関数 dec2hex と関数 dec2bin もまた、数値の配列を 16 進数値または 2 進数値として表すテキストにその配列を変換します。ただし、これらの関数は文字配列を返します。その各行は入力数値配列からの数値を表し、必要に応じてゼロでパディングされています。

2 進数表現から 16 進数への変換

2 進数値を 16 進数に変換するには、2 進数リテラルで始めて、それを 16 進数値として表すテキストに変換します。リテラルは数値として解釈されるため、dec2hex の入力引数として直接指定できます。

D = 0b1111;
hexStr = dec2hex(D)
hexStr = 
'F'

16 進数リテラルで始める場合は、dec2bin を使用してその 2 進数値を表すテキストに変換できます。

D = 0x8F;
binStr = dec2bin(D)
binStr = 
'10001111'

2 進数値によるビット演算

2 進数の一般的な使用法の 1 つは、ビットの表現です。たとえば、多くのデバイスには、メモリ内のデータやデバイスのステータスを表すビットの集合へのアクセスを提供するレジスタがあります。このようなハードウェアを操作する場合は、数値を MATLAB で使用してレジスタ内の値を表現することができます。特定のビットを表現し、それにアクセスするには、2 進数値とビット演算を使用します。

8 ビット レジスタを表す数値を作成します。2 進数表現で開始すると便利ですが、数値は整数として格納されます。

register = 0b10010110
register = uint8
    150

特定のビットの値を取得または設定するには、ビット演算を使用します。たとえば、関数 bitand と関数 bitshift を使用して 5 番目のビットの値を取得します (このビットを先頭位置にシフトし、MATLAB で 0 または 1 が返されるようにします。この例では、5 番目のビットは 1 です)。

b5 = bitand(register,0b10000);
b5 = bitshift(b5,-4)
b5 = uint8
    1

5 番目のビットを 0 に反転させるには、関数 bitset を使用します。

register = bitset(register,5,0)
register = uint8
    134

register は整数であるため、関数 dec2bin を使用してすべてのビットを 2 進数形式で表示します。binStr は文字ベクトルであり、先頭に接頭辞 0b をもたない 2 進数値を表します。

binStr = dec2bin(register)
binStr = 
'10000110'

参考

| | | | | | | |

関連するトピック

外部の Web サイト