主题:字符与进制
ninjia
[专家分:10] 发布于 2008-08-24 18:32:00
在把十六进制化为十进制时,有一段程序:
read (ch ) (意及输入一个十六进制数)
if (ch>='0')and(ch<=‘9’)then t:=ord(ch)-48;
if(ch>='a')and(ch<='z')then t:=ord(ch)-86;
if(ch>='A')and(ch<=‘Z')then t:=ord(ch)-55;
请问这里是什么道理?怎么回事?(这个t用case分别赋值给其他几个变量,求的是十六进制的个十百千位,分别乘4096、256、16、4)
请高手释疑,定有加分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复列表 (共9个回复)
沙发
无所不能 [专家分:270] 发布于 2008-08-25 18:30:00
t:=ord(ch)-48;
这是把字符转换为数字,48是在ASCII码表中0的十进制数,是程序自定义的
ord是把字符换为ASCII码表中的十进制数
其他的同理
板凳
ninjia [专家分:10] 发布于 2008-08-26 20:51:00
无所不能大侠,小弟不是问ASCII码,而是问前面的if条件句中
if (ch>='0')and(ch<=‘9’)
if(ch>='a')and(ch<='z')
if(ch>='A')and(ch<=‘Z')
以及为什么
then t:=ord(ch)-48
then t:=ord(ch)-86
then t:=ord(ch)-55;
若能释疑,再给专家分!麻烦各位了!
3 楼
ninjia [专家分:10] 发布于 2008-08-26 20:53:00
无所不能大侠,小弟不是问ASCII码,而是问前面的if条件句中
if (ch>='0')and(ch<=‘9’)
if(ch>='a')and(ch<='z')
if(ch>='A')and(ch<=‘Z')
那些数字和字母是代表ASCII码吗?或者是别的什么?
以及为什么
then t:=ord(ch)-48
then t:=ord(ch)-86
then t:=ord(ch)-55;
若能释疑,再给专家分!麻烦各位了!
4 楼
小田甜 [专家分:3910] 发布于 2008-08-28 12:59:00
[quote]
if (ch>='0')and(ch<='9')
if (ch>='a')and(ch<='z')
if (ch>='A')and(ch<='Z')
那些数字和字母是代表ASCII码吗?或者是别的什么?
以及为什么
then t:=ord(ch)-48
then t:=ord(ch)-86
then t:=ord(ch)-55;
[/quote]
程序要输入16进制,而16进制是用0~9、A~F来表示的。
'0'的序号是48,ord('0')=48,所以-48
而'a'的序号(ASCII序号)是97,即ord('a')=97,而'a'表示10(十进制中的10)所以需要写-85 ?为什么你给的是86???
之后的'b'..'z'的序号都是递增的,所以这样就能用10进制表示那一位上是什么数字了。
同理,'A'序号65,需要减去55得到10
5 楼
ninjia [专家分:10] 发布于 2008-08-29 17:27:00
请问小田甜:为什么ord('a')到ord('z')为10到35?十六进制不是15到头吗?
6 楼
小田甜 [专家分:3910] 发布于 2008-08-31 13:52:00
是啊,所以16进制只用到'F','G'..'Z'没有用
7 楼
ninjia [专家分:10] 发布于 2008-08-31 18:12:00
可是,小田甜,如果我输入的是1a2B,程序会怎么处理?
8 楼
小田甜 [专家分:3910] 发布于 2008-09-10 15:23:00
(((1*16+10)*16+2)*16+11)*16
9 楼
ninjia [专家分:10] 发布于 2008-09-21 14:10:00
可是,小田甜,再问一句,if (ch>='0')and(ch<='9')
if (ch>='a')and(ch<='z')
if (ch>='A')and(ch<='Z')
中的ch表示什么,是一位数还是四位数,若是四位数,怎么比较?
我来回复