您当前的位置:首页 > 电脑百科 > 电脑知识

计算机储存数字和字符的方法你了解多少?

时间:2019-11-08 16:45:29  来源:  作者:

作者:薛8

来源:https://ddnd.cn/2019/02/16/byte-hex-ascii/

前言

最近在学习中涉及到计算机储存、传输数字和字符等操作,由于对字节、2进制、10进制、16进制、ASCII码的概念以及它们之间的关系和转换理解的不够透彻,导致在通讯、MD5消息摘要算法等时候出现问题,是因为数据转成计算机认识的01的这个环节出现问题。由于这个问题并不是那么容易发现,所以我也算是花了挺多时间才解决了这个问题,记录下解决过程,顺便也当复习一下计算机组成原理。

ASCII码

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
ASCII 码一共规定了128个字符(0000 0000-0111 1111)的编码,比如空格SPACE是32(二进制0010 0000),大写的字母A是65(二进制0100 0001 )。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位(低7位),最前面的一位(高1位)统一规定为0(不要和数字的符号位搞混)。
当然除了ASCII码,还有UTF-8、GBK等。

字节

字节(Byte)普通计算机系统能读取和定位到最小信息单位,即我们通过计算机储存和传输数据的时候都是先把数据转成字节。
字节即Byte,一个字节代表8个比特(Bit),字节通常缩写为B,比特通常缩写为b。字节的大小是8Bit,即字节的范围是0000 0000 - 1111 1111,对于无符号型,它表示的十进制范围是[0,255],对于有符号型,高一位表示符号位,它表示的十进制范围是[-128,127]。

计算机若何储存数据

计算机只认识0和1(因为计算机只有高低电平两个状态),数据要想通过计算机储存或者传输,首先是要把数据转成计算机能认识的格式即01数据。
我们举个例子,以储存十进制数字28和-28为例,首先将十进制数转成二进制。

需要注意的是: 数字在计算机中储存的是补码,而字符是在计算机中储存的是字符对应的编码(不要和数字的补码搞混)。

数字

储存十进制数字28和-28为例,首先将十进制数转成二进制,高1位为0代表正数,为1代表负数

28(10) = 0001 1100(2)(原码)

-28(10) = 1001 1100(2)(原码)

然后计算机将二进制数字进行补码运算,运算结果如下

28(10) = 0001 1100(2)(原码) = 0001 1100(2)(补码)

-28(10) = 1001 1100(2)(原码) = 1110 0100(2)(补码)

然后计算机保存的就是补码,当要取出数据的时候,就将补码逆运算一下,即可求出原码,再将原码转换一下就可以得到真实的数据了。
下面以JAVA语言演示这个过程,首先我们要清楚Java的byte、short、int、long都是有符号的(signed)

计算机储存数字和字符的方法你了解多少?

 

运行输出:

28储存到计算机后为:11100

-28储存到计算机后为:11111111111111111111111111100100

取出储存的28 以无符号表示:28

取出储存的-28 以无符号表示:4294967268

我们验证一下结果,验证了计算机确实是以补码的方式储存数字。这里有个小问题,就是我们知道int型有4个字节即32个比特,但是28却输出了111005个比特而已,是因为toBinaryString()方法把11100前面的0给忽略了。
取出的时候,我们以无符号的标准去处理,导致取出存入的-28结果是4294967268和我们存入的不一样,这是因为-28是负数,负数的补码和原码不一样,而用无符号处理的话就是直接将11111111111111111111111111100100转成结果了。而为什么28用有无符号处理结果都一样是因为正数的原码和补码一样,这样验证了Java的数据类型都是有符号的。

至于计算机为什么用补码来储存数字,而不是原码,原因是:
拿单字节整数来说,无符号型,其表示范围是[0,255],总共表示了256个数据。有符号型,其表示范围是[-128,127]。
先看无符号,原码和补码都一样,0表示为0000 0000,255表示为1111 1111,刚好满足了要求,可以表示256个数据。
再看有符号的,若是用原码表示,0表示为0000 000。因为咱们有符号,所以应该也有个负0(虽然它还是0)1000 0000。这样的话那就有2个0,也就是只能表示255个数据,不能够满足我们的要求。而用补码则很好的解决了这个问题。

字符

在计算机中,对非数值的字符进行处理时,要对字符进行数字化,即用二进制编码来表示字符。其中西文字符最常用到的编码方案有ASCII编码和EBCDIC编码。对于汉字,我国也制定的相应的编码方案,比如 GBK,GB2312等。
比如字符a的ASCII码十进制值为97,在计算机中用二进制表示就是 01100001。下面同样用Java来演示计算机是如何储存字符的。

  1. 采用UTF-8和GBK两种编码储存汉字
计算机储存数字和字符的方法你了解多少?

 


计算机储存数字和字符的方法你了解多少?

 


我们调试看看,发现GBK编码采用2个字节储存,储存的数据分别是10进制的-42和-48对应的二进制分别是11010110和11010000(补码),即汉字中对应的二进制为1101011011010000,即16进制的D6D0,查看GBK对照表,发现16进制编码D6D0对应的汉字确实是中

计算机储存数字和字符的方法你了解多少?

 

而UTF-8编码采用3个字节储存,同理将对应的二进制111001001011100010101101转成16进制,为E4B8AD,通过UTF-8编码查询,发现汉字中对应的16进制编码确实是E4B8AD
 

计算机储存数字和字符的方法你了解多少?

 

  1. 储存字符
计算机储存数字和字符的方法你了解多少?

 


计算机储存数字和字符的方法你了解多少?

 


调试看看,字符串EF有E和F两个字符,它们对应的十进制ASCII码分别是69和70

计算机储存数字和字符的方法你了解多少?

 

我们发现Java的getBytes()方法是将字符串的每一个字符都储存到一个字节的,如果我们想把EF储存在一个字节里面,即EF是一个整体的,一个字节,不能拆分,那我们可以把EF放在一个字节里面(byte)(0xEF),声明它是一个字节,不是字符,不用再将它转成字符对应的编码。
下面说说我在进行MD5消息摘要算法时候遇到的坑,我要对QQ号对应的Hex进行MD5算法散列,这里我举例QQ号的10进制为12345678,对应的16进制为00BC614E(因为QQ号固定长度4个字节,所以前面补了2个0),一开始我是以下面的方式进行MD5算法的

计算机储存数字和字符的方法你了解多少?

 


计算机储存数字和字符的方法你了解多少?

 


调试可以看到上面的代码其实是将字符串00BC614E转成了8个字节,然后再对这8个字节进行散列,这也是基于字符串进行的MD5散列,和通过网上一些网站散列得到的值是一样的

计算机储存数字和字符的方法你了解多少?

 

但是这个哈希值和预想的结果不一致,后来才知道预想的结果是基于字节进行的MD5散列,也就是00BC614E应该分成4个字节(00、BC、61、4E)而不是8个字节(0、0、B、C、6、1、4、E),然后通过修改代码

计算机储存数字和字符的方法你了解多少?

 


计算机储存数字和字符的方法你了解多少?

 


使用(byte)声明是一个字节,不是字符,不用再将它转成字符对应的编码。00、BC、61、4E分别是一个字节,当然因为字节为8个比特,能表示256个数字,因为Java的数据类型是有符号的,所以8个比特能表示的10进制范围是[-128,127],所以(byte)(x) x不能小于-128和不能大于127,否则会溢出,溢出的部分数据会丢失。



Tags:储存   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前几天,我们几个老同学去另一位同学家串门,同学神神秘秘把我们领到他的书房,来参观他新购进的茶台。还专门从书橱中拿出了自己平时不舍得喝的“珍藏版”绿茶,给我们沏上了一壶高...【详细内容】
2021-10-19  Tags: 储存  点击:(37)  评论:(0)  加入收藏
你的iPhone在成功更新到iOS15后,有没有遇到一直提示“iPhone存储存空间将满”? 明明自己的iPhone至少有20G以上,可就是一直出现此提示,无论是清理内存还是关机重启,都无法清除这...【详细内容】
2021-09-22  Tags: 储存  点击:(66)  评论:(0)  加入收藏
对只有64G或者128G的iPhone用户可能都会遇到这样的问题:每当储存空间不足时就会就需要挑选并删掉一部分照片或者平时不常用的软件。因为iPhone并不像安卓一样拥有一键清理的...【详细内容】
2021-08-27  Tags: 储存  点击:(289)  评论:(0)  加入收藏
最近气温越来越高了,天气热的时候,细菌也疯狂生长,这也就使得家里的食物更容易滋生细菌而发生腐败、变质,去超市买的食物放冰箱也放不了几天就都烂了。就我的观察来看,很多人在储...【详细内容】
2021-07-22  Tags: 储存  点击:(69)  评论:(0)  加入收藏
绿茶通常非常敏感。它含有极易氧化的成分。  因此,储存绿茶时应小心。如果储存得当,绿茶可以保鲜24个月。  判断茶叶新鲜度的要点是;   鲜茶味道具有干净醇厚的口感。  ...【详细内容】
2021-05-26  Tags: 储存  点击:(131)  评论:(0)  加入收藏
大蒜收获以后会有一个时间段属于休眠期,这个时间段一般不会发芽,超过这个时间段以后,只要环境条件许可,就会吸收水分,开始发芽,所以,如果有大蒜又想长期保存,就必须了解大蒜的繁殖规...【详细内容】
2021-02-25  Tags: 储存  点击:(178)  评论:(0)  加入收藏
气温高,顶着烈日,出去走一圈,回到家中,就会扑向冰箱,赶快翻翻,找点降温的东西,就算来点冰块也好啊。如果养成这样的习惯,您就要当心啦,食源性疾病会瞄准您。如果是孕妇,风险会更大。冰...【详细内容】
2021-01-06  Tags: 储存  点击:(120)  评论:(0)  加入收藏
食物冷藏储存是延长其可使用期限的重要方法。但是这仅仅是延长,要想保证饮食的安全性,应当了解一下不同食物在冰箱储存的安全期限。经济日报-中国经济网提示,过了一般的安全期限,即使食物看起来没有变质,也最好不要再食用...【详细内容】
2020-05-25  Tags: 储存  点击:(137)  评论:(0)  加入收藏
常用格式(PSD;JPEG;PNG)1、PSDpsd格式是photoshop存档的专用格式;PSD文件可以存储成RGB或CMYK模式,还能够自定义颜色数并加以存储,还可以保存Photoshop的层、通道、路径等信息。未...【详细内容】
2020-05-14  Tags: 储存  点击:(93)  评论:(0)  加入收藏
最近在学习中涉及到计算机储存、传输数字和字符等操作,由于对字节、2进制、10进制、16进制、ASCII码的概念以及它们之间的关系和转换理解的不够透彻,导致在通讯、MD5消息摘要算法等时候出现问题...【详细内容】
2019-11-08  Tags: 储存  点击:(112)  评论:(0)  加入收藏
▌简易百科推荐
回答这个问题前首先要了解一度电的定义一度电= 1000W·h ,是一个能量单位,一个功率为1000w的设备持续运作一小时就会消耗1度电。所以台式机多少时间一度电完全取决于台...【详细内容】
2021-12-20  数码榜    Tags:台式电脑   点击:(5)  评论:(0)  加入收藏
你是不是很多时候都会紧急冲向电源插座以拯救笔记本电脑的电量?很多时候由于附近没有方便的插座,一是会误事,二是会导致尴尬。幸运的是,现代笔记本电脑比前辈高效得多。如今,即...【详细内容】
2021-12-16  趣玩公社    Tags:电池   点击:(18)  评论:(0)  加入收藏
电脑在我们生活中的重要性不言而喻。如何保证自己的电脑流畅好用,对于很多用户来说都非常重要。作为一个理科男和IT从业者,对于自己的电脑还是非常在意的,会定期的进行整理,保持...【详细内容】
2021-12-09  小伊评科技    Tags:电脑   点击:(13)  评论:(0)  加入收藏
大家好,我是良许。不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢?我在朋友圈做了个小调查,发现...【详细内容】
2021-11-30  良许Linux    Tags:固件   点击:(11)  评论:(0)  加入收藏
澎湃问吧世界著名密码史学家戴维·卡恩曾说:“人类使用密码的历史几乎与使用文字的时间一样长”,这意味着人类密码领域的较量已近五千年。提及“密码”一词,大多数人会想...【详细内容】
2021-11-24    澎湃新闻  Tags:密码   点击:(16)  评论:(0)  加入收藏
由于去中心化域名和账户体系可以承载应用、网站和用户身份,因此有理由相信,这是 Web3 世界中不可或缺的一环。撰文:潘致雄如果回忆一下初次进行的加密货币转账时的体验,特别是在...【详细内容】
2021-11-03  链闻ChainNews    Tags:ENS   点击:(26)  评论:(0)  加入收藏
 文件系统(File System)是计算机系统必不可少的组成部分,可以说除了部分结构简单的单片机系统之外,文件系统是支撑每一个计算机系统运行的最重要的支撑,无论是操作系统、应用程...【详细内容】
2021-11-01  欧工玩转嵌入式  CSDN  Tags:FAT32   点击:(31)  评论:(0)  加入收藏
SDS 2.0时代进化达尔文的《进化论》认为,地球上现存的所有生物都是自然选择的结果,生物只有适应环境的变化,才能得到生存和进化。回望到企业存储,一个常做常新的行业,从上古结绳...【详细内容】
2021-10-28  ExponTech   企鹅号  Tags:SDS   点击:(35)  评论:(0)  加入收藏
在昨天的微信《远程办公危机四伏,到底该pick谁给你保驾护航?》中介绍了远程员工应该具备的四大安全工具,今天继续分享干货:05 双因子令牌在理想的情况下,每个人都会对所有的关键...【详细内容】
2021-10-26    计算机世界  Tags:远程办公   点击:(32)  评论:(0)  加入收藏
今天几乎所有的数字显示设备都基于某种类型的 RGB(红、绿、蓝)颜色模型。RGB 是表示人类可以看到的大多数颜色的最有效方式(有一些颜色不能很好地产生,但这是另一个讨论)。相机...【详细内容】
2021-10-09  懒懒散散的程序员    Tags:RGB   点击:(50)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条