ページ 11

16進数の表示

Posted: 2010年5月03日(月) 01:24
by リョウ
すいませんまた質問します。
前に質問した
キーボードから入力した整数を n とする。アルファベット順で英小文字 'a' から 数えて n 番目の文字を印字するプログラムを作成せよ
という問題に下のような表示になるように16進数表示せよ
% ./ASCII
Input integer: 18
The charater away from 'a'(97) by 18 is 's'(115).
(0x61) (0x73).
%
という問題で16進数はどう表示すればいいのでしょうか?
osはlinuxで
コンパイラはgcc

途中のソースは
#include <stdio.h>

# define BUFFER_SIZE (256)

int get_int(void)
{
char buf[BUFFER_SIZE];

fgets(buf, BUFFER_SIZE, stdin);

return atoi(buf);
}

#include <stdio.h>

int main(void)
{
int a;
char b, c;
printf("Input integer: ");
a = get_int();
b = 97;
c = 97 + a;
if(a < 26) printf("The charater away from 'a'(97) by %d is '%c'(%d).\n", a, c, c)
printf(" (0x61) ()");

return 0;

}
です。

Re:16進数の表示

Posted: 2010年5月03日(月) 02:07
by Justy
 printfで出力するなら、変換指定子 xを使います。
[color=#d0d0ff" face="monospace]
int a = 0;
printf("0x%02x\n", a);
[/color]


Manpage of PRINTF
http://www.linux.or.jp/JM/html/LDP_man- ... ntf.3.html

Re:16進数の表示

Posted: 2010年5月03日(月) 04:23
by リョウ
すいません。質問を少し間違えました。
私が聞きたいのは、アルファベットaからn番目のアルファベット
を表示している変数cを16進数ではどう表示するかです。
10進数は数字を足すだけなのでわかるんですが
16進数はたとえばzなら0x7aとアルファベットが入っているので
よくわからないのです。

Re:16進数の表示

Posted: 2010年5月03日(月) 06:28
by box
> 16進数はたとえばzなら0x7aとアルファベットが入っているので
> よくわからないのです。

じゃあ、0x0f + 0x01 を手で計算できますか?

Re:16進数の表示

Posted: 2010年5月03日(月) 08:38
by リョウ
できないと思いますが、
できるとすれば0x0(f+1)ですか?

Re:16進数の表示

Posted: 2010年5月03日(月) 09:13
by たいちう
10進数から16進数への変換とその逆変換を、手で計算できますか?
boxさんの式の各項を10進数に変換し、10進数の足し算をし、
和を16進数に変換するとどうなりますか?

Re:16進数の表示

Posted: 2010年5月03日(月) 10:52
by たかぎ
16進数(16進法)がどういうものなのか、もう一度勉強しなおすことをお勧めします。
# 私の世代では、中学1年の数学で習ったんですけどね。

Re:16進数の表示

Posted: 2010年5月03日(月) 12:11
by リョウ
私の学校では16進数をまったく勉強しなかったです...
0x0f + 0x01 = 0x10
こうですか?

Re:16進数の表示

Posted: 2010年5月03日(月) 12:35
by たかぎ
> 私の学校では16進数をまったく勉強しなかったです...

それはそうでしょう。
中学1年生の1学期で、N進法と集合論を教えられたのは、昭和46年から54年までの9年間だけですから(私はその最後の年でした)。
N進法を習っていなければ、16進数や2進数といきなりいわれてもわからないのは当然ですし、集合論を習っていなければ、論理演算もにわかには理解できませんね。

> 0x0f + 0x01 = 0x10
> こうですか?

そうです。
16進法では、0~15で1桁を表します。
ただし、10~15を1文字で表すために、A~F(小文字でもOK)を使うわけです。
そして、Fの次は桁が上がって10になります。
前に0xが付くのはC言語(というかUNIX)の流儀で、数学的には(10)<sub>16</sub>と表記しますし、BASICなら&H10、多くのアセンブリ言語では10Hと表記します。中には、$10とか、H'10と表記するものもあります。

ちなみに普段使っている10進法は、両手の指が10本だから使われるようになったもの(人間の片手の指が5本なのは、最初の脊椎動物、つまり魚の胸びれの骨が5本だったから)で、たまたまです。
一方、土地などの分割の便宜から、12進法を使っていた地域もあります。英語でelevenやtwelveがthirteen以降と明らかに異なる表現なのは12進法の影響といわれていますし、ヤード・ポンド法やダースなどの単位系も12進法です。
コンピュータが2進法を使うのも、ハードウェアを設計する上でその方が便利だったからです。

Re:16進数の表示

Posted: 2010年5月03日(月) 13:41
by リョウ
みなさん返信ありがとうございます。
おかげさまで理解することができ、完成しました!
これから進数をもっと自習しようと思います。
またよろしくお願いいたしますm(--)m