16進数

本ページには広告が含まれています。

16進数から10進数に変換します。$表記は小数には対応していないため、10進数表記の小数の値を変換するにはhexToDec関数 (自作関数)を使います。

構文
$(16進数)
引数
戻り値
10進数に変換した値

16進数とは

16進数とは09の10個の数字と、AFの6個のアルファベット(小文字も可)の16種類の文字を使って数値を表現する方法です。

コンピュータの内部では電圧の高低を10(スイッチのON/OFF)に対応付けた2進数であらゆる情報を表しています。そのためコンピュータにとって2進数が便利なのですが、2進数は桁が大きくなりすぎるため人間にとっては扱いづらい表現です。16進数だと1桁が4bitとビット数自体が\(2^{n}\)という形式になり便利なため、コンピュータで数値を扱うときには16進数がよく使われます。例えば、Web開発でカラーコードは#(シャープ)の後に数字6桁で#FF5733、文字コードは0x41のような16進数で表現されます。

10進数では一つの桁において09の10種類の文字を扱うことができるのに対し、16進数では0123456789ABCDEFの16種類の文字を扱うことができます。

1から9までは10進数と同じ数値ですが、AからF10から15に対応しています。

10進数 012345678910111213141516
16進数 0123456789ABCDEF10

10進数では0,1,2,…,7,8,9と1桁で表現できる上限まで来ると10と桁が増えるように、16進数も0,1,2,…,D,E,Fの次は10と桁が上がります。このとき10ジュウではなく、イチゼロと読みます。

また10進数と16進数など複数の基数表記がある場合、例えば10が10進数のジュウなのか16進数のイチゼロなのかの区別がつきません。そのため以下の表に示すような接頭辞・接尾辞のいずれかをつけることで区別します。基数とは位取り記数法で数値を書き記す際に各桁の重み付けの基本となる数のことで10進数では10、16進数では16です

進数 2進数 8進数 10進数 16進数
接頭辞 0b 0oもしくは0 0d 0x
接尾辞 b o d h

例えば0x1010hというように書けば16進数の100d1010dと書けば10進数の10というように何進数の表記なのかが明確になります。10進数のときは接頭辞・接尾辞を省略することもあります。

接頭辞・接尾辞のアルファベットはそれそれBinary(2進数)Octal(8進数)Decimal(10進数)Hexadecimal(16進数)の頭文字から来ています。16進数の接頭辞のみheXadecimalと3文字目のxです。

ただし接尾辞のbdは16進数の値との区別がつかなくなることがあるので、接頭辞を使うのをおすすめします。

右下に基数を小さく添え字として書く方法もありますが、この表記は数学で使われることがあってもプログラミングで使われることはあまりありません。

例えば\(1011_{2}\)は2進数の1011、\(13_{10}\)は10進数の13、\(5F_{16}\)は16進数の5Fのようになります。

使い方

16進数の0x50xA0x1F0xFFをそれぞれ10進数に変換します。

UWSC
PRINT $5
PRINT $A
PRINT $1F
PRINT $FF
結果
プレーンテキスト
5
10
31
255

表現できる範囲

$を使って表現できるのは、符号付き64bitの整数である-9,223,372,036,854,775,808+9,223,372,036,854,775,807の範囲の数値です。(-922京3372兆0368億5477万5808922京3372兆0368億5477万5807)。

UWSC
PRINT "最大値:" + $7FFFFFFFFFFFFFFF
PRINT "最小値:" + $8000000000000000
結果
プレーンテキスト
最大値:9.22337203685478E18
最小値:-9.22337203685478E18

先頭の1bitは符号を表すために使われるので63bitが数値を表し、\(-2^{63}\)〜\(2^{63}-1\)の範囲となります。

符号ビット

最上位ビット が符号を表す符号ビットです。64bitなので16進数だと右から16桁目になります。2進数にしたとき0(16進数で07)であれば正数、1(16進数で8F)であれば負数となります。

0x80は64bitで表記すると0x0000000000000080となり最上位ビットが0なので正数となります。

UWSC
PRINT $80
PRINT $0000000000000080
結果
プレーンテキスト
128
128

最上位ビットを省略すると0埋めされて正数になるので、負数を表現するには以下のように16桁で表現します。

UWSC
PRINT $FFFFFFFFFFFFFFFF
PRINT $FFFFFFFFFFFFFFFE
PRINT $FFFFFFFFFFFFFFFD
結果
プレーンテキスト
-1
-2
-3

計算

16進数同士

結果は10進数で返されます。

UWSC
PRINT $F + $E                    // 15 + 14
PRINT $10 + $FFFFFFFFFFFFFFFA    // 16 + (-6)
結果
プレーンテキスト
29
10
16進数と10進数

16進数と10進数の値が混在していても、計算することができます。こちらも結果は10進数で返ります。

UWSC
PRINT $F3 + 150     // 243 + 150
結果
プレーンテキスト
393

16進数に変換するにはFORMAT関数 (スクリプト関数)を使います。第1引数に16進数に変換する値、第3引数に-1を指定します。

UWSC
DIM dec = $F3 + 150
PRINT FORMAT(dec,, -1)
結果
プレーンテキスト
189

decToHex関数 (自作関数)でも16進数に変換できます。最上位ビットで符号の判断をしているので先頭に0が入ることがあります。

UWSC
PRINT decToHex($F3+150)
結果
プレーンテキスト
0189

関連記事

hexToDec関数 (自作関数)
16進数を10進数に変換します。負数・小数の値にも対応しています。
decToHex関数 (自作関数)
10進数を16進数に変換します。負数・小数の値にも対応しています。
binToHex関数 (自作関数)
2進数を16進数に変換します。負数・小数の値にも対応しています。
hexToBin関数 (自作関数)
16進数を2進数に変換します。負数・小数の値にも対応しています。
decToBin関数 (自作関数)
10進数を2進数に変換します。負数・小数の値にも対応しています。
binToDec関数 (自作関数)
2進数を10進数に変換します。負数・小数の値にも対応しています。