C言語関係掲示板

過去ログ

No.280.文字列引く '0' は数値とは

[戻る] [ホームページ]
No.1674

教えてください
投稿者---あき(2002/06/07 02:59:05)


文字列から'0'を引くと数値になるという原理が
よく分かりません。どなたか教えてください。


#include<stdio.h>

main() {

char ch2[33],i;
char ch[33];
scanf("%s",ch);
for(i=0; i<=32; i++) {
if(ch[i]=='\n') break;
else {
ch2[i]=ch[i]-'0';
if(ch[i]=='\0') break;
}

}
printf("%s\n",ch);

}

こんなプログラムなんですが…。

No.1684

Re:教えてください
投稿者---ともじ(2002/06/08 00:25:20)


こんばんは。

>文字列から'0'を引くと数値になるという原理が
>よく分かりません。どなたか教えてください。

ASCIIコードはご存知ですよね。
ASCIIコードでは数字を表す、'0'〜'9'の文字は

 '0' : 0x30 '1' : 0x31 '2' : 0x32 '3' : 0x33 '4' : 0x34
 '5' : 0x35 '6' : 0x36 '7' : 0x37 '8' : 0x38 '9' : 0x39 です。

つまり、'0'である0x30をそれぞれから引けば、数値の 

 0,1,2,3,4,5,6,7,8,9 

になりますね。


No.1685

Re:文字列引く '0' は数値とは
投稿者---ともじ(2002/06/08 00:28:00)


うっかりしました。タイトルは具体的に書きましょう。

No.1687

Re:教えてください
投稿者---ジャスミン茶(2002/06/08 05:26:01)


はじめまして。
以下のプログラムを実行するとアスキーコードの32番から127番までが表示されます。
すると48から57までが数字に割り当てられている事が分かります。
なのでアスキーコードの48(=='0')から48(=='0')を引くことで変数の中身を0に出来ます。
アスキーコードの51(=='3')から48を引けば変数の中身が3になります。
こうすると数字に変換できるわけです。
要するにアスキーコードで0の時、変数の中身が48なので、
48を引いて変数の0にしてしまおうという事です。
#include <stdio.h>

main()
{
	int i, n;

	puts("10進 16進 文字  10進 16進 文字  10進 16進 文字");
	puts("----------------------------------------------");
	for (i = 32; i <= 63; i++) {
		for (n = 0; n < 3; n++) {
			printf("%3d  0x%x   %c   ", i+(32*n), i+(32*n), i+(32*n));
			}
		puts("");
	}
}