回 帖 发 新 帖 刷新版面

主题:字符与进制

在把十六进制化为十进制时,有一段程序:
  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个回复)

沙发

t:=ord(ch)-48;
这是把字符转换为数字,48是在ASCII码表中0的十进制数,是程序自定义的
 ord是把字符换为ASCII码表中的十进制数


其他的同理

板凳

无所不能大侠,小弟不是问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 楼

无所不能大侠,小弟不是问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 楼

[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 楼

请问小田甜:为什么ord('a')到ord('z')为10到35?十六进制不是15到头吗?

6 楼

是啊,所以16进制只用到'F','G'..'Z'没有用

7 楼

可是,小田甜,如果我输入的是1a2B,程序会怎么处理?

8 楼

(((1*16+10)*16+2)*16+11)*16

9 楼

可是,小田甜,再问一句,if (ch>='0')and(ch<='9')
                        if (ch>='a')and(ch<='z')
                         if (ch>='A')and(ch<='Z')
中的ch表示什么,是一位数还是四位数,若是四位数,怎么比较?

我来回复

您尚未登录,请登录后再回复。点此登录或注册