さて, 16 進表記
において,
が成立しますから, 10 進表記の数を 16 で割っていき, その余りを
下の桁から順に書いていけば, 自動的に 16 進表記ができる事になります.
下のプログラムは, 符号無し int 型の 10 進表記を 16 進表記に変換する プログラムで, 簡単のために 16 進の出力は先頭部分に 0 の列が現れる様に なってます. プログラム内で, do - while 文が現れています. これは, 既に現れた while 文と同様ですが, まず最初に do を一度実行してから while 判定が行われて, その後判定結果が偽になるまで doの { } で 囲まれた部分が繰り返されます.
文字列リテラル(literal)
ANSI の規格では, 2重引用符 " で囲まれた文字列は, 「文字列リテラル」 と呼ばれます.
C言語の文字列は最期に '\0
のついた char 型配列です.下のプログラムでは,
char output[]="00000000"; char moji[]="0123456789ABCDEF";
の部分は, 文字列リテラルを用いた文字列(char 型配列変数)の初期化です.
/* File name 10-3.c */ #include <stdio.h> #define BUFFSIZE 1024 main() { char input[BUFFSIZE]; char output[]="00000000"; char moji[]="0123456789ABCDEF"; unsigned int decimal, residue; int radix=16; int i=1; printf("Input a decimal number.>>"); fgets(input, BUFFSIZE, stdin); sscanf(input, "%ud", &decimal); do{ residue = decimal%radix; decimal = decimal/radix; output[8-i] = moji[residue]; i++; } while(decimal != 0); printf("Its hexadecimal notation is 0x%s.\n", output); }