if ((a<70));printf "%d\n" "'a"为什么显示95?

回复 收藏
第一次发帖,
  1. [root@localhost ~]# if ((a&lt;70));then  printf "%d\n" "'a"; fi
  2. 97
  3. [root@localhost ~]# if ((a&gt;70));then  printf "%d\n" "'a"; fi
  4. [root@localhost ~]#

这是为什么?
2016-08-13 23:38 举报
已邀请:
0

阿铭 管理员

赞同来自:

你的例子我试过 没问题。
0

乐橙306

赞同来自:

ASCII码表中 小写字母a  换算成十进制为  97

0

maria

赞同来自:

{:4_93:}你如果给a赋值了,想打印a的值,后面的引号里应该是$a
如果没有赋值,那你后面打印的趋势应该是a的ascii码的十进制,因为你指定了格式为十进制了啊
0

a_leon

赞同来自:

首先感谢阿铭老师的回答,我是第一次在这里发帖,搞不清楚猿课底下提问和这里的区别,今天才看见老师给别的同学回复的一段话:在猿课底下提问的,在这也提问的话,就在猿课底下做个连接。再回答阿铭老师,我知道这个命令没问题,是可以成功执行,但我有一点想不通,if 的判断条件 a < 70,然后打印 a 的Ascii码值,它就有输出,但是a > 70 的时候,他就没输出了啊! 这是反的。a < 70,输出97;a > 70 ,就不输出了。请大家看清楚判断的条件。还有三楼的同学,我知道a是97,我都在脚本的输出看见了。@三楼。还有四楼的同学,我觉得你对待学习很认真,学分排行你总是在前面,也很感谢你来这里回答,关于你的回答,我还有点小疑问,我是在哪指定十进制的?
出现这个问题,是我当初在网上找如何显示字符ASCII码时,随便写了脚本,然后我就很郁闷。@四楼、@ maria,不知道你能不能看见。我在贴些代码:
  1. [root@web9 sbin]#  if ((a<70));then  printf "%d\n" "'a"; fi
  2. 97
  3. [root@web9 sbin]#  if ((a>70));then  printf "%d\n" "'a"; fi
  4. [root@web9 sbin]# echo $a

  5. [root@web9 sbin]# echo a
  6. a
0

maria

赞同来自:

本帖最后由 maria 于 2016-8-21 11:05 编辑
a_leon 发表于 2016-8-20 00:21
首先感谢阿铭老师的回答,我是第一次在这里发帖,搞不清楚猿课底下提问和这里的区别,今天才看见老师给别的 ...

{:4_93:}因为你之前并没有赋值变量a,也就是a是空值。所以你a<70的时候有输出,而a>70的时候没有输出,输出的是你a的ascii码,但是判断的时候用的是这个变量a所指的值。
至于你问我的你在哪指定十进制了。我现在回答你,%d的d就是接受整数值并将它表示为有符号的十进制整数的意思。顺便给你说下其他进制怎么表示。
ounsigned int无符号8进制整数(不输出前缀0)
u
unsigned int无符号10进制整数
x / X
unsigned int无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
f(lf)
float(double)单精度浮点数用f,双精度浮点数用lf
e / E
double科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写
g / G
double有效位数,如:%8g表示单精度浮点数保留8位有效数字。双精度用lg
c
char字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
看样子你没学过编程,所以说这些你可能有点难理解,还是多少学点编程知识对你的学习会有帮助的。
0

a_leon

赞同来自:

maria 发表于 2016-8-21 10:29
因为你之前并没有赋值变量a,也就是a是空值。所以你a70的时候没有输出,输出的是你a的ascii码, ...

我终于搞懂了,也就是说a没有赋值时,比较时是空值,就拿这个空值和70比较呢。因为空值小于70,所以会输出。大于70 ,就不输出了,谢谢你

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: