今天在学c语言的时候,突然想到一个很有趣的问题。键盘中输入的字符,它可以用ASCII码表示,最终以二进制的形式存储在计算机中。然后整数它也是以二进制的形式存储在计算机中。那么在一堆连续的零和一当中,他该如何区分呢?呃,我的一个猜测是这跟c语言在规定数据的类型有关,因为字符类型是占一个字节。整数类型如果是64位要占4个字节,所一旦存进去,他就会把这一块区域自动归为整数区域。嗯,具有相当于带了一个标签,提醒你读到这个地方的首地址时该往后读四个字节。嗯,这样就可以把字符跟整数区别出来,那如果这样的话n该如何区别呢?他没有规定某个变量是整数还是字符?猜测可能是编译的过程中,会有自己的推测吧,这也就是为什么python运行的要比C慢的原因,在中间应该有一个推导的过程。可能讲的不对,希望大家能多多交流,
好像没啥道理。数据就是数据,它不知道自己会被怎么使用。怎么使用是程序运行的时候,根据代码逻辑到内存中获取对应数据,按代码指定的类型进行处理的
你说的是对的。
在C语言中,字符与整数在内存中实际上并没有区别。
例如char c = 'a';用printf("%d\n", c);打印出来就是十进制数97,对应'a'的ASCII码。数据是什么含义,取决于你如何使用它。
你问的这个问题
嗯,这样就可以把字符跟整数区别出来,那如果这样的话n该如何区别呢?
是想问“如果这样的话Python该如何区别呢”吧?
这个可以参见https://www.zhihu.com/question/29015668
至于Python比C慢的原因,这个类型处理应该不是主要原因。
这跟访问规则有关,访问规则通常跟数据类型有关。数据类型声明数据的访问规则,是写程序的时候定义的,所以在地址空间中不会有访问规则的标签,这个标签是在写程序的时候贴的。
如果不理解前面这段,可以看看这个例子,printf("%c", 97)会输出字符,而printf("%d", 97)会输出整数,虽然它们访问的是同一块区域,但是由于访问规则不同,它们的结果也不同。
至于Python比C慢,是因为以下几个原因:
Python的所有数据类型都是对象,没有基础数据类型。最直观的是一个int占24个字节
Python的所有东西都分配在堆上,访问速度较慢
Python是解释型语言,运行时需要一句一句地翻译成机器码;C语言在编译的时候一次就能翻译成机器码,以后直接调用机器码就行
望采纳谢谢