小朋友学C语言(19):字符和整数的关系

程序(一)

#include <stdio.h>
int main()
{
    char ch = 'A';
    printf("%c\n", ch);
    printf("%d\n", ch);
    printf("********************\n");
    int num = 66;
    printf("%c\n", num);
    printf("%d\n", num);
    printf("********************\n");
    ch = 'a';
    printf("%c\n", ch);
    printf("%d\n", ch);
    printf("********************\n");
    num = 100;
    printf("%c\n", num);
    printf("%d\n", num);
    printf("********************\n");
    ch = 'B' + 24; // 相当于ch = 'Z';
    printf("%c\n", ch);
    printf("%d\n", ch);
    printf("********************\n");
    num = 97 + 25; // 97是'a'
    printf("%c\n", num);
    printf("%d\n", num);
    return 0;
}

运行结果:

A
65
********************
B
66
********************
a
97
********************
d
100
********************
Z
90
********************
z
122

分析: 从程序的运行结果可以看出,字符和整数是对应的。 字符’A’对应于65,’B’对应于66,’C’对应于67,……,’X’对应于88,’Y’对应于89,’Z’对应于90。 ’a’对应于97,’b’对应于98,’c’对应于99,……,’x’对应于120,’y’对应于’121’,’z’对应于122。

为什么会有对应关系呢? 具体原因请参考: ASCII编码简介

程序(二)

#include <stdio.h>
int main()
{
    for(char ch = '0'; ch <= '9'; ch++)
    {
        printf("字符%c <---> 数字%d\n", ch, ch);
    }
    return 0;
}

运行结果:

字符0 <---> 数字48
字符1 <---> 数字49
字符2 <---> 数字50
字符3 <---> 数字51
字符4 <---> 数字52
字符5 <---> 数字53
字符6 <---> 数字54
字符7 <---> 数字55
字符8 <---> 数字56
字符9 <---> 数字57

分析: 从程序运行结果可以看出,字符‘0’对应于48,‘1’对应于49,‘2’对应于50,‘3’对应于51,‘4’对应于52,‘5’对应于53,‘6’对应于54,‘7’对应于55,‘8’对应于56,‘9’对应于57。

那么字符串“10”对应于数字多少呢?58吗? 不是的。计算机把字符串“10”当成了两个字符:‘1’和‘0’,分别对应49和48。

具体也可查阅ASCII编码简介中的表格。

还有一个问题:当你用键盘输入“0”的时候,计算机怎么知道你输入的是字符还是数字呢? 很简单,看格式化符号,如果是scanf(“%c”, ch),计算机就当做是字符,如果是scanf(“%d”, ch),计算机就当成是数字。 printf(“%c”, ch)和printf(“%d”,ch)也是同样的道理,这从上面的代码就可以看出来。

程序(三)

#include <stdio.h>
int main()
{
    char ch = '\0';
    printf("%d\n", ch);
    ch = ' ';
    printf("%d\n", ch);
    ch = '\n';
    printf("%d\n", ch);
    return 0;
}

运行结果:

0
32
10

分析: 从运行可以看出: (1)‘\0’与‘0’是不一样的,因为二者对应的ASCII编码不一样。 ‘\0’对应着0,‘0’对应着48。 ‘\0’代表空字符(NULL),通常用来做为字符串的结束符。 '0'则是字符0或者数字48。

(2)程序里的‘\0’、‘\n’是转义字符。 什么叫转义呢?就是改变原来的意义。 比如‘0’表示字符‘0’,加上斜杆后‘\0’就变成了空字符。 再比如‘n’表示字符‘n’,加上斜杆后‘\n’就变成了换行符。

(3)所有的键盘操作(比如按Enter键进行换行)都对应着一个字符,当然也就对应了一个整数。都可以转化成机器可以认识的二进制。

注意:空格是用字符' '来表示,不是用''来表示,两个单引号之间一定要加个空格,否则会报错。

作业:完整阅读 ASCII编码简介

原文发布于微信公众号 - 海天一树(gh_de7b45c40e8b)

原文发表时间:2017-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenjx85的技术专栏

leetcode-80-删除排序数组中的重复项 II

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

15310
来自专栏游戏开发那些事

【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识

  自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书...

11730
来自专栏老马说编程

计算机程序的思维逻辑 (15) - 初识继承和多态

继承 上节我们谈到,将现实中的概念映射为程序中的概念,我们谈了类以及类之间的组合,现实中的概念间还有一种非常重要的关系,就是分类,分类有个根,然后向下不断细化...

22190
来自专栏程序员与猫

常见的正则表达式解读释义

又名:写给正在学习前端的女友看的常见正则表达式解读。原文发布于 https://www.zybuluo.com/wddpct/note/728081 。 ...

22190
来自专栏C语言C++游戏编程

有人@我,你有一份C语言基础大全手册要领取,快来拿!

前两天,有网友问了我一个关于C语言的问题,本着认真装逼的态度,我把大学时学过的C语言课本翻了一遍,终于找到了答案。整理后,现分享给大家!

19420
来自专栏java一日一条

Java的常见误区与细节

1 在Java中,没有goto语句。因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用。同时,为了避免程序员自行使用...

13830
来自专栏我是攻城师

理解插入排序,希尔排序,选择排序的算法原理

在前面的文章中,其实已经把效率比较高的排序算法给分析过了,比如比较通用的快排,归并排序和堆排,还有用于特定场景的计数排序等。本篇我们把剩下的几种效率一般的排序算...

12010
来自专栏诸葛青云的专栏

python入门:进来吧,给自己10分钟,这篇文章带你直接学会python

假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程。那么本教程将花费十分钟的时间带你走入Python的大门。本文的内容介于教程(Totur...

6000
来自专栏闻道于事

Java之分支和循环

Java中的分支语句: if语句: if语句的四种写法:   (1)   if(表达式_布尔值) {   ...   }   (2)   if(表达式_布...

32290
来自专栏柠檬先生

你不知道的javaScript笔记(4)

类型: JavaScript 有7种内置类型 空值 (null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符串(stri...

23050

扫码关注云+社区

领取腾讯云代金券