美文网首页
💻 一个汉字多个字节是什么意思

💻 一个汉字多个字节是什么意思

作者: 沐深 | 来源:发表于2021-01-05 23:39 被阅读0次

在计算机系统中,一个汉字为什么用多个字节表示

1.什么是字节?

字节(byte)是计算机存储基本单位
1byte = 8 bit, 二进制数系统中,每个0或1就是一个位(bit)。
字符是最基本单位,1byte = 8bit。
比如一个文件是3byte,那么 其中是 3个,8位二进制,
比如ABC,就是,0110 0001,0110 0010,0110 0011
bit 中文名称是位,音译“比特”,是用以描bai述电脑数据量的最小单位。

bit 来自binary digit (二进制数字),由数学家John Wilder Tukey提出(可能是1946年提出,但有资料称1943年就提出了)。这个术语第一次被正式使用,是在香农著名的论文《通信的数学理论》(A Mathematical Theory of Communication)第1页中。

2.为什么 1byte = 8 bit ?

先了解下ASCII码


image.png
image.png

最初计算机是美国人发明的,美国人觉得128个字符够用了。
ASCII表中一共 128个字符 128 == 2^7
128 二进制表示, 1111111,
0 二级制表示 0000000 需要7位。

原始的ASCII编码是7位的,所以有2^7=128个字符(包括一zhi些不可显示字符)。但是dao电脑里1Byte=8bit,有8位。早期的电脑不太可靠,数据经常出错,所以这1Byte的8位中最高为就用来做数据校验,一般是奇偶校验。
但是后来的电脑变得可靠了,校验的意义就没有那么大了,因此有了一个扩展ASCII字符集。扩展ASCII字符集包含2^8=256个字符,编码是8位的。扩展ASCII字符集中的前128个字符与原来的ASCII字符集相同(就是原来的ASCII字符集的7位编码前面加一个0),而后面128个字符高位都是1。

随着计算机的发展和深入,7位的字符有时已不够用,为此国际标准化组织又制定了ISO2022标准,它在保持ISO646兼容的基础上,规定了扩充ASCII字符集为8位代码,可表示256个字符.。

ps(C/C++的标准中,从来没有规定1byte等于8bit 。它只规定了:sizeof(char) = 1,除此之外,还有一项相关的规定就是:sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)。 但是现实中,1byte确实绝大部分都是8bit的。其源头是tcp/ip协议中,有这样的规定。 所以,除非你做的系统不准备支持tcp/ip协议,否则,依循它的协议,使用1byte=8bit是最简单的)

3.其它语言怎么用二进制表示

随着计算机的流行,许多国家需要将自己的文字加入到计算机中,但是ASCII已经满了,于是出现了新的标准,Unicode,采用16进制表示编码,转换为二进制最多为21位。

汉字 16 进制 二进制
4e00 100111000000000

Unicode的缺点:,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。于是出现了
UTF(UTF是“Unicode Transformation Format”的缩写)
UTF对应编码

Unicode编码(十六进制) UTF-8 字节流(二进制)
000000-00007F 0xxxxxxx
000080-0007FF 110xxxxx 10xxxxxx
000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx

UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是4个字节。从上表可以看出,4字节模板有21个x,即可以容纳21位二进制数字。Unicode的最大码位0x10FFFF也只有21位。

例1:“汉”字的Unicode编码是0x6C49。0x6C49在0x0800-0xFFFF之间,使用3字节模板:1110xxxx 10xxxxxx 10xxxxxx。将0x6C49写成二进制是:0110 1100 0100 1001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

例2:Unicode编码0x20C30在0x010000-0x10FFFF之间,使用4字节模板:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx。将0x20C30写成21位二进制数字(不足21位就在前面补0):0 0010 0000 1100 0011 0000,用这个比特流依次代替模板中的x,得到:11110000 10100000 10110000 10110000,即F0 A0 B0 B0。

4.为什么一个汉字用多个字节表示

这是因为,在UTF-8中,为了节约空间,也为了兼容ASCII编码系统,将Unicode中原本用2个字节表示的字符表示成1~4个字节(具体转换规则在这里不赘述了),其中大多数汉字部分(比如“汉”)在UTF-8中为3字节,但是在中国大陆地区,GBK编码依然很常用,在GBK中,除ASCII字符外,都是一个字符占两个字节。所以,一个汉字占多少字节还是具体取决于编码

相关文章

  • 💻 一个汉字多个字节是什么意思

    在计算机系统中,一个汉字为什么用多个字节表示 1.什么是字节? 字节(byte)是计算机存储基本单位1byte =...

  • UTF8中中文占多少个字节

    占2个字节的:〇 占3个字节的:基本等同于GBK,含21000多个汉字 占4个字节的:中日韩超大字符集里面的汉字,...

  • String 类构造方法

    字节是负数=汉字 一个汉字连个字节 String(byte [] bytes,int offset, int l...

  • 为什么需要UTF-8与GBK进行转化?

    UTF-8一个汉字是三个字节,英文是一个字节; GBK一个汉字是两个字节;英文是一个字节;

  • 计算机是怎样跑起来的

    存储汉字时,字符编码不同,汉字所占用的字节数也就不同。在GBK字符编码下,一个汉字占用2个字节。而在UTF-8字符...

  • 一步一步学习 Web 安全 3.1 宽字节注入

    原理 宽窄字节字符大小为一个字节(英文默认一个字节)称为窄字节,为两个字节(汉字默认两个字节)的称为宽字节,比如:...

  • iOS面试题及答案整理 — 持续更新

    一、基础篇 1 . 一个字节多少位?一个汉字多少位?一个字母多少位 一个汉字等于两个英文字母等于两个字节、一个字节...

  • 2020-ios-面试总结

    基础篇 1 . 一个字节多少位?一个汉字多少位?一个字母多少位一个汉字等于两个英文字母等于两个字节、一个字节是八位...

  • MySQL之vachar

    5.0.3之前,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节),最大...

  • 1.Java基本类型,所占字节和范围

    GBK编码,一个汉字占两个字节。 UTF-16编码,通常汉字占两个字节,CJKV扩展B区、扩展C区、扩展D区中的汉...

网友评论

      本文标题:💻 一个汉字多个字节是什么意思

      本文链接:https://www.haomeiwen.com/subject/mdepoktx.html