二进制与字符编码

一:为什么计算机采用二进制     

      计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。所以计算机只能识别二进制。

二:什么是二进制

      二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

      二:有两个位数,分别是0和1

     进:这两个位数循环和重复使用

     制:它是一种应用规范,目前主要直接源于和应用于计算机领域

    所谓“逢二进一”是指等于2时,就进一位。

      (即101+1=110)

      例: 10111+1010=?

          10111

         +1010

        —————

        100001

  所谓“借一当二”是指两个数相减时,向高位借1当作2使用。

  (即110等价于102)

           11011

           -1101

         ————

            1110

三:为什么对字符进行编码

            在电脑中输入字符时,电脑要自动把它转换为二进制数,才能存储在电脑中。为了在计算机上也能表示、存储和处理像文字、符号等等之类的字符,就必须将这些字符转换成二进制数字。当然,肯定不是我们想怎么转换就怎么转换,否则就会造成同一段二进制数字在不同计算机上显示出来的字符不一样的情况,因此必须得定一个统一的标准进行转换。于是就设计出了进行这种转换的标准——字符编码标准。

四:字符编码的发展历程

     1:ASCII

          最开始计算机在美国发明使用,需要编码的字符集并不是很,最早只有127个字符被编进计算机里,也就是大小写英文字母、数字和一些简单标点符号,其中可见字符95个(可见字符包括英文字母、数字、标点符号),控制字符33个(控制字符包括换行、回车、删除···),美国人将这128个字符集合称作ASCII字符集如大写字母A的编码是65,小写字母a的编码是97

随着计算机被迅速推广使用,欧洲的非英语国家的人们发现这套由美国人设计的字符集不够用了,于是扩充了ASCII编码规则也就是从128一直扩展到255,又新增了128个字符,新增的128个字符叫作扩展ASCII字符集。通过对ASCII码的扩展似乎解决了一些欧洲国家的字符编码问题。

ASCII码的字符存储方式:直接将ASCII字符集的码位转化成二进制进行存储。

2:GB23121981年5月1日发布的简体中文汉字编码国家标准

         当电脑来到中国时,人们发现扩展之后的ASCII码也就只能表示256个字符,而中国常用的汉字也接近有上千了。在计算机中,把8位聚在一起的二进制位数称为一个字节(byte),故计算机中一个字节有256个状态。既然8位最多表示256个字符,那就只能用16位来表示一个字符。基于中国的字符数目庞大,设计字符集采用分区管理,共计94个区,每个区包含94个位,共8836个码位,收录7445个图形字符,其中包括6763个汉字。

     01---09区收录除汉字外的682个字符。

    10--15区为空白区,没有使用。

    16--55区收录3755个一级汉字,按拼音顺序。

     56--87区收录3008个二级汉字,按部首/笔画顺序。

    88---94区为空白区,没有使用。

3:GBK1995年12月发 布的汉字编码国家标准

        GBK是对GB2312编码的扩充,新增近20000个汉字和字符,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

4:GB180302000年3月17日发布的汉字编码国家标准

       GB18030是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,收录70244个汉字。GB18030字符集采用单字节、双字节和四字节三种方式对字符编码。兼容GBK和  GB2312字符集。

5:Unicode

       国际标准字符集,它将世界各种语言的每个字符设定了统一并且唯一的码,以满足跨语言、跨平台的文本信息转换。Unicode采用四个字节为每个字符编码

6:UTF-8

        UTF-8是 Unicode 的一种转换编码,用一到四个字节编码 Unicode 字符,相对于 Unicode 固定的四字节长度,更节省存储空间.

       下面采用一个例子简述Unicode和UTF-8编码存储规则

            (1)使用unicode字符集(定长编码)

                   字符              编号              二进制位

                     e                  101                 01100101

                     g                  103                 01100111

                     g                  103                  01100111

                     o                  111                   01100111

                     世                19990              01001110 00010110

                     界                30028              01110101 01001100

            得到存储方式如下:

                       00000000    00000000   00000000   01100101          e

                       00000000    00000000    00000000   01100111          g

                       00000000    00000000    00000000   01100111           g

                       00000000    00000000    00000000   01100111           o

                       00000000    00000000    01001110   00010110           世  

                       00000000    00000000    01110101    01001100          界

          采用的是不管编号多大多小统一按最长的来,位数不够高位补零

          显而易见的是大大的浪费内存,而且字符集收录的越多,编号跨度越大,

          内存空间造成的浪费越多。

                (2)使用UTF-8编码存储(变长编码)

                                 编号                   编码模板                                                      字节

                                [0,127]                   0XXXXXXX                                              1byte

                                [128,2047]             110XXXXX 10XXXXXX                            2byte

                                [2048,65535]          1110XXXX  10XXXXXX   10XXXXXX      3~4byte

                             得到存储方式如下:

                                         字符              编号              二进制位

                                           e                  101                 01100101

                                           g                  103                 01100111

                                           g                  103                 01100111

                                           o                  111                  01100111

                                           世                19990              11100100  10111000 10010110                 

                                           界                30028              11100111   10010101 10001100

               采用小编号少占字节,大编号多占字节。极大减少了内存空间的浪费。

最后想表达一下我的真实想法:

                  写的比较通俗简单,源于我的个人专业能力不是很强,就是抱着整理归纳学习的思想写出来的,希望对大家都有所帮助。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZSup{A}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值