首页 > 其他分享 >计算机如何储存数字和字符,与各种进制的本质,与ASCII码

计算机如何储存数字和字符,与各种进制的本质,与ASCII码

时间:2024-10-27 15:51:37浏览次数:6  
标签:11 字符 进制 10 二进制 苹果 ASCII 十进制 计算机

前言 

       我想问大家一个问题:二进制、八进制、十进制、十六进制究竟是计算机中才有的概念,还是可以脱离计算机仅仅作为数学概念而独立存在呢?

        答案是后者,如果你不曾想过这个问题,你也就大概不能十分清晰的理解计算机对于数字与字符的存储。

        为了更加清晰的阐述文章,我想要先给大家讲一下各种进制到底怎么回事。

各种进制的本质

        大家需要先了解一个老生常谈的概念,却很本质,如下:

  • 二进制是满2进1
  • 八进制是满8进1
  • 十进制是满10进1
  • 十六进制是满16进1

什么叫做进1呢?

        如果我有6个苹果,问我苹果个数,回答:6

        如果我有9个苹果,问我苹果个数,回答:9

        6和9都只有1个数字,而一个数字最大只能表示:9个苹果

        如果我有9个苹果,你有1个苹果,问我们共有几个苹果,回答:10

        10是两个数字,9+1超过了一个数所能表示的最大范围,需要两个数表示

        9和1也可以用两个数表示,为:09和01,故9+1需要进1,指的是向高位进1

        这就是十进制进一的意思,相信大家都明白。

二进制如何进1?

        二进制是满2进1,十进制满10就要进1了,最大的个位数是9;二进制满2就要进1了,最大个位数是1。

        如果我有1个苹果,问我苹果个数,二进制回答:1

        如果我有1个苹果,你有1个苹果,问我们总共有几个苹果,二进制回答:10

        二进制的10就是十进制的2.

十进制3如何用二进制表示?

        3就是十进制意义里的2即10加上二进制意义里的1。

        10 + 1 =11, 故二进制11就是三个苹果的意思。

二进制如何进行加法?

        如下图:

        只需遵循满2向高位进1即可,与十进制运算本质上一致。

        在现实世界中,我们习惯用数学上的十进制来描述,其实也可以用二进制来描述。例如我们可以说,有3个十进制的苹果,也可以说是有11个二进制的苹果。

        在这里,你要明白,数学上我们有多种描述数量的方式,最常用的是十进制方式,也可以用二进制、八进制和十六进制去描述现实世界的数量,它们描述的意思都是一样的。只是不同的进制的运算是不同的,例如二进制满2进1。

        数学上二进制如何转换为十进制、八进制与十六进制的技巧性算法,不是本文的重点,但是掌握各种进制转换会对你有所帮助,你可以先花10分钟去学习一下各种进制转换的技巧。

        数学上二进制11,就是十进制3。可是作为只认识二进制的计算机如何处理数字3呢?

计算机如何处理十进制数字

        当我们输入十进制的数字3,编译器会将十进制3转换为二进制11,然后将二进制11存储到计算机中。

        也就说在编译器中有一张表,如下:

十进制二进制
00
11
210
311
4100
5101
6110
7111
81000
91001
101010
111011
121100
............

        当输入十进制5时,编译器根据5对应的二进制是101,从而将101送入计算机。

        如果编译器中这张表十进制5,对应的是二进制10,就会将10送入计算机;如果编译器中这张表十进制5,对应的是二进制1100,就会将1100送入计算机;所以说,,当你输入数字5,最终送入计算机中的二进制是什么,完全取决于设计编译器的时候,那张表中十进制5对应的二进制数字是什么。

        计算机只认识二进制数字,不认识十进制数字,当输入十进制数字时,我们可以用二进制数字去代表这个十进制数字。也就是说哪怕你用二进制11(数学意义为十进制3),去代表十进制5,从而让你在输入十进制5的时候,编译器将二进制11送入计算机也可以。说的再浅显一点,这张表中二进制与十进制的对应规则,是人为制造的,可以采用数学意义的对应规则,也可以随便自定义规则。只不过事实上,我们采用的对应规则,确实是数学意义上的规则罢了。

        当我们输入十进制的3+3,编译器会根据表,先将第一个十进制3转换为二进制11,再将先将第一个十进制3转换为二进制11,然后进行二进制11与二进制11的加法计算,得到二进制110。然后将二进制110送入显示器,在送入显示器的过程中也有一张表,如下:

二进制十进制
00
11
102
113
1004
1015
1106
1117
10008
10019
101010
101111
110012
............

        二进制110送入显示器的过程中会根据这张表,将二进制110,转化为十进制6,然后我们就在屏幕上看到6了。同样的道理,这张表也可以自定义。只不过事实上,我们采用的对应规则,确实是数学意义上的规则罢了。这张二进制转化为十进制的表和上面十进制转化为二进制的表肯定规则一致,否则不就乱套了

        这两张表都采用数学意义上的规则来定义,就可以实现十进制的加法。而绝对不是,现实世界中十进制3+十进制3=十进制6,计算机中就必须二进制11+二进制11=二进制110。换句话说,绝对不是人脑根据数学上描述现实世界的实际意义,认为十进制3,就是二进制11;然后计算机就直接认为十进制3,就是二进制11。但是有一点不变,人脑怎么算加法,计算机就怎么算加法。基于这个,我们只需要根据十进制与二进制数学上的对应关系建立一张表,让计算机根据这张表去进行十进制与二进制直接的对应,就可以实现计算机认为十进制3,就是二进制11。从而实现正确对应,实现正确的加法运算。

        对应其它进制与其它运算,都是同一个道理。

计算机如何处理字符与ASCII码表

        计算机底层存储的只有0和1,不存在任何其它的东西。那么如何来输入输出字符呢?

        跟如何输入输出十进制数字是同样的道理,我将二进制数字与字符也建立一张对照表就可以了。比如我建立一个表如下:

二进制字符
1000001A
1000010B
1000011C
1000100D

        如果我输入字符A,编译器会根据这张表,将其转化为二进制1000001,并将二进制1000001送入计算机。这张表也是自定义的,上述十进制与二进制的对应表,为了计算方便,在定义的时候采用了现实世界的数学逻辑,而字符与二进制的对应表你可以认为就是随便定义的,没啥逻辑。国际上定义了一个字符与二进制的通用对应表。这个表就是ASCII码表。下图就是这个表就是ASCII码表的一部分:

        注意:二进制太长了,表中用十进制来代表二进制的值。举个例子,ASCII码表65,你就可以看做二进制的1000001。

计算机如何分辨底层二进制代表了什么

        刚才讲到了十进制65,在计算机底层用二进制1000001来存储,

        又讲到了字符A,在计算机底层也用二进制1000001来存储,

        那到底计算机底层中的二进制1000001表示的是65还是A呢?

        这取决于你的操作。

举个例子:此时计算机底层已经存储了二进制100001

       让计算机显示65,此时你可以命令计算机,让计算机将二进制送入显示器的过程中,按照二进制转换为十进制的那张表,让二进制1000001转换为十进制65。

         让计算机显示A,此时你可以命令计算机,让计算机将二进制送入显示器的过程中,按照二进制转换为字符的那张表,让二进制1000001转换为字符A。

        我用C语言代码。模拟以下这个过程:

        相比此时你对计算机如何储存数字和字符,与各种进制的本质,与ASCII码,理解的更加透彻了。

标签:11,字符,进制,10,二进制,苹果,ASCII,十进制,计算机
From: https://blog.csdn.net/2301_81570594/article/details/143267733

相关文章

  • 抖音发送私信接口响应的二进制数据解析
    请求发送评论接口得到:data=b'ap`\x00\x97\xce\xaa(\xef\xaa\xcd\x98[\xe1\x07\xcex\xd3%\xa4\x06z\x07$N\x12c\xde\x9b\xf0\xb2\xff\xb6&\xcb\xce\xfc\xd5~\xbf\xd0=\x94\x1e\xda\x9e|\xc7\xfcED\xf4\xeePI.\xc94\x99G\xb1D\xc8d......
  • 【Orange Pi 5 Linux 5.x 内核编程】-字符设备文件操作实现
    字符设备文件与操作(具体实现)文章目录字符设备文件与操作(具体实现)1、内核空间程序(设备驱动)1.1kmalloc()1.2kfree()1.3copy_from_user()1.4copy_to_user()1.5open操作实现1.6write操作实现1.7read操作实现1.8close操作2、用户空间应用程序......
  • 【Orange Pi 5 Linux 5.x 内核编程】-字符设备文件与操作(IOCTL)
    字符设备文件与操作(IOCTL)文章目录字符设备文件与操作(IOCTL)1、IOCTL介绍2、IOCTL使用步骤2.1在驱动程序中创建IOCTL命令2.2在驱动中编写IOCTL函数2.3在用户空间创建IOCTL命令3、内核空间IOCTL驱动实现4、用户空间应用程序5、验证在上一篇文章中,......
  • 实现在一个字符串中查找另一个字符串的功能
    题目:实现字符串函数strstr的功能,在一个字符串中查找另一个字符串,若查找到则返回子串第一次出现的地址,若查找不到返回NULL。解题思路:在一个字符串(假设为str1)中查找另一个字符串(假设为str2)。思路是遍历整个字符串str1,如果出现与字符串str2首字母相同的字母,那么我从这个位置(注......
  • 04 二进制
    二进制位数,每个位都是右侧位数的两倍;八位机,一次性处理八位数的二进制数10101010,八位数表示从0到255,比如八位绘画板一共255种颜色可以使用,一位数0、1为bit,八位数构成一个基本数串作为为一个字节,基本数串byte,有些用字节作为储存单位;内存已经到GB,TB上万亿字节量32位计算机,处......
  • 2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQu
    2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组wordsContainer和wordsQuery,要对每个wordsQuery[i]找到一个与其有最长公共后缀的字符串。如果有多个字符串与wordsQuery[i]有相同的最长公共后缀,则返回在wordsContainer中最早出现的那个。最后,返回一个整数数组a......
  • 代码随想录算法训练营第七天|LeetCode 344.反转字符串、LeetCode 541.反转字符串Ⅱ、
    LeetCode 344.反转字符串题目链接:LeetCode344.反转字符串文章链接:代码随想录题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题。示......
  • 二进制的详细展开
    1.二进制转换成十进制使用8421快速转换法使用方法:1.从右往左写出8421表格(就是每个数字都*2)2.二进制数从右往左依次对应8421表格3.二进制的数中,0不取,1取4.将取出来的数进行相加即可2.二进制的原码、反码、补码1.原码:是数据的二进制体现形式,一个字节由8个二进制位组成高......
  • 【Python中的字符串处理】正则表达式与常用字符串操作技巧!
    Python中的字符串处理:正则表达式与常用字符串操作技巧Python在字符串处理方面提供了丰富的内置功能和模块,能够帮助开发者处理各种复杂的文本操作。无论是简单的字符串拼接、替换,还是借助正则表达式(re模块)实现的模式匹配,Python都有强大的工具可以让我们高效处理文本数据......
  • 在C语言中如何实现字符串反转
    在C语言中,要实现字符串反转,基本的方法有三种:1、使用数组来存储字符串并反向输出;2、使用指针进行反向输出;3、使用递归方法将字符串反向输出。在这里,我们将详细介绍如何使用指针进行反向输出。一、使用指针进行反向输出在适用于字符串反转的许多方法中,使用指针实现字符串反转是......