数字和字符的区别?

初学C语言时,总感觉 数字 和 字符 之间的界限很模糊。有时明明应该是 char 类型的变量,粗心定义为 int 类型,程序竟然也能正常运行。而读取字符的 getchar函数 和打印字符的 putchar函数,返回类型竟然是 int。为什么数字和字符之间可以“越俎代庖“?两者的区别究竟是什么?

随着对C语言理解的深入,我对上述问题有了一定的理解。请听我娓娓道来:

在日常生活中,计算机要处理各种各样的信息 (数字、文字、符号、图形、音频、视频等),虽然这些信息在人类眼中是不同的,但在计算机的内存中,它们都以二进制数字的形式存储。

十进制数字 (整型) 直接转化为二进制存储,字符类型按照ASCII码转化为二进制存储,其他类型的数据也会按照不同的规则,转化为二进制数字存储。

所以,数字和字符,乃至其它类型的数据,本质上是一回事儿。在计算机内存中,谁还不是二进制了?重点是,你以怎样的视角去看待,在怎样的场景去使用。

就像一本厚厚《C Primer Plus》,学习编程时,它是一本详细全面的经典教材;遇到突发情况时,抡起来似乎也是不错的防身武器。运用之妙,存乎一心。

内存中的 01110010(十进制:114),如果 printf(“%d”); 那就是数字114;如果 printf(“%c”); 那就是ASCII码中114对应的r。

反过来,无论是定义一个char ch = ‘r’; 或者 int num = 114; ,在计算机的内存中,都存储为 01110010。

我可以 printf(“%c”, num); 打印一个r,也可以 printf(“%d”, ch); 打印一个114。因为它们本质上是一样的,区别只在于我创造了什么场景,以怎样的方式使用。

下面,请看代码:

#include <stdio.h>

int main()
{
    char ch1 = '\1';
    char ch2 = 1;
    char ch3 = '1';

	printf("%d\n", ch1);
	printf("%d\n", ch2);
	printf("%d\n", ch3);

	printf("%c\n", ch1);
	printf("%c\n", ch2);
	printf("%c\n", ch3);

	return 0;
}

你能否判断出上述程序的输出结果?

‘\1’ 是转义字符,反斜杠后跟三位八进制数字,代表这个八进制数字转化为ASCII码值对应的字符。八进制的1,也是十进制的1,转化为2进制在内存中就是一群0和一个1。

1 就是数字1。在数值上和 ‘\1’ 相等,在内存中显然也一样。

‘1’ 是字符1,对应ASCII码值 49,在内存中就是二进制的49。

所以,按照 %d 形式打印,结果就是 1 1 49。

按照 %c 形式打印,就是 两个ASCII中1对应的字符(我也不清楚是啥),以及一个字符1.

程序运行结果如下,我们的分析是正确的。

在这里插入图片描述
(希望我有讲清楚数字和字符的区别)

End

本人小白,若有疏漏,请各位大佬多多包容、指正!

如果对你有帮助的话,不要吝惜你的点赞哦~

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值