信息的编码表示

news2024/10/5 17:21:32

文章目录

  • 1 前言
  • 2 西文字符的编码表示——ASCII 码
  • 3 中文字符的编码表示
    • 3.1 区位码
    • 3.2 国标码
    • 3.3 机内码
    • 3.4 国标码与机内码
  • 5 机外码

1 前言

在计算机的内部,所有数据都是通过二进制编码而保存的,计算机只能识别二进制。因此我们存储任何信息到计算机中时,都会转换成相对应的二进制编码。

2 西文字符的编码表示——ASCII 码

ASCII 码美国标准信息交换代码(America Standard Code for Information Interchange),由字面意思就能知道这个编码诞生的目的就是为了信息交换。ASCII 码对以下字符都进行了编码,其中包括:

  • 大小写字母,共52个;
  • 0~9 的数字,共10个;
  • 控制符,如空格符、回车符等共34个字符;
  • 通用符,如 +、-、*、/、!、? 等共32个字符。

一共128个,而7位二进制位刚好可以表示 0 ~ 127 一共128个十进制数,所以 ASCII 码中的每个字符只需7位二进制位(单位比特bit)即可表示。ASCII 码是目前计算机特别是微型计算机中最普遍使用的字符编码集。ASCII 码中常见的数字、字母的 ASCII 码和其对应的十进制、十六进制数如下表所示(控制字符用于格式控制,是不可见字符,除了不可见字符以外的字符都是可见字符。):

字符ASCII 码:二进制数(B)十进制数(D)十六进制数(H)
数字0~90011 0000B ~ 0011 1001B45 ~ 5730H ~ 39H
大写字母 A ~ Z0100 0001B ~ 0101 1010B65 ~ 9041H ~ 5AH
小写字母 a ~ z0110 0001B ~ 0111 1010B97 ~ 12261H ~ 7AH

在这里插入图片描述

我们知道,计算机中的地址和数据都是以字节为单位的,一个字节是8个二进制位,那就说明 ASCII 码中的每个字符实际上是占用一个字节。因此我们通常将高位为0的 0000 0000B ~ 0111 1111(0 ~ 127) 的 ASCII 码称为基本的 ASCII 码;而将高位为1的 1000 0000B ~ 1111 1111(128 ~ 255) 的 ASCII 码称为扩展的 ASCII 码。但不管是哪一种,它们都属于机内码的范畴。

3 中文字符的编码表示

3.1 区位码

由于汉字远多于英文字母,我们不能将所有的汉字都印在键盘上。所以对于汉字的编码通常是采用两个字节,每个字节各取7位,从而能够表示 2 7 × 2 7 = 16384 2^7\times 2^7=16384 27×27=16384个汉字。

中国国家标准总局于1980年发布的 GB2312-80 编码方案对汉字进行了分区处理。GB 即国标码,是计算机与其他系统或设备间交换汉字信息的标准编码。那么分区处理具体是什么意思呢?

这种编码方案首先将汉字分为一级汉字和二级汉字,一级汉字按拼音排序,二级汉字按部首排序。这些汉字被放置在一个 94 x 94 的方阵中,每一行称为一个“”,每一列称为一个“”,构成一个共有94区94位的字符集。

  • 01 ~ 09区:682个非汉字图形字符;
  • 10 ~ 15区:空区留待扩展;
  • 16 ~ 55区:3755个常用汉字(一级汉字)字符,按拼音排序;
  • 56 ~ 87区:3088个非常用汉字(二级汉字)字符,按部首排序;

在这个字符集中,每一个汉字都唯一对应一个区号和位号,各自可用一个字节来表示,从而构成了区位码。区位码 = 区号(1~94) + 位号(1~94),区号在高字节,位号在低字节。比如国处于25行90列,那么它的区位码就是2590,换为十六进制就是197AH,也就是其在计算机中的存储编码。

3.2 国标码

对于输入计算机的西文字符,计算机存储的是其对应字符的 ASCII 码。这些可被计算机识别、存储和运算的二进制代码被称为机内码,如大写字母“A”对应于十进制的65,然后转为二进制的 0100 0001B 存在计算机中。

区号和位号都是用一个字节来保存,这就会导致其与 ASCII 编码中的不可见字符(0x00 ~ 0x1F,即十进制的0~31)以及空格(0x20,即十进制的32)冲突,因此标准总局又将区号和位号分别加上32(十六进制的 20H)作为“国标码”。

国标码中区号和位号的范围如下表所示:

二进制(B)十进制(D)十六进制(H)
0010 0001B ~ 0111 1110B33 ~ 12621H ~ 7EH
  • 国标码 = 十六进制的区位号 + 2020H;
  • 国标码 = 十进制的区位号 + 32,再转为十六进制。

3.3 机内码

但是这个“国标码”仍然与 ASCII 编码方案中的其它字符(0x21~0x7F,即十进制的33~127)冲突,故又把“国标码”每个字节的最高位都由0变成1,这相当于每个字节再加上128(十六进制的 80H),从而得到“机内码”。其实相当于避开了所有基本的 ASCII 码。注意这个机内码特指汉字的机内码,简称“内码”,是对国标码的一个改进,而不是 3.2国标码 中开头提到的“机内码”。

例如“万”字区位码是1601,即 1001H,所以“国标码”是 3021H,“机内码”是 B0A1H。

  • 机内码 = 区位码 + 160(A0H);
  • 机内码 = 国标码 + 128(80H)。

为什么没有一步到位避开 ASCII 中的扩展字符呢?因为 GB2312-80 方案是1980年发布的,而 ASCII 方案直到1986年才定了最终版本。此后,计算机中使用 GB2312 编码方案时都采用上述机内码的方案,以兼容 ASCII 字符集,而所谓的国标码实际上就没有用了。

3.4 国标码与机内码

1995年中国国家标准总局年发布的《汉字内码扩展规范(GBK)》1.0版对 GB2312 标准进行了扩充,此时,仍然称 GB2312 为“机内码”。直到2000年 GB18030-2000 标准发布,取代了 GBK,这才摒弃“国标码”与“机内码”同存的称呼,与 ASCII 兼容的“机内码”成为名正言顺的“国标码”,GB2312 的老国标码弃用。

所以,现在提到汉字国标码,不要再去纠结什么机内码,请直接将 GB2312 及 GBK 所谓的机内码当做国标码对待。而且,2017年起,GB2312-80 标准已经转化为推荐性标准 GB/T 2312-1980,不再强制执行。再者,现在的中文处理多以国标 GB18030 和国际通用的 Unicode 编码方案执行,GB2312 及其扩展方案 GBK 逐渐会被淘汰。

总之,“机内码”指的是编码的一个分类,而非某一特定的编码方式。引起理解错误的主要原因是 GB2312 编码方案中提到的机内码与国标码的混乱。

目前,网络上描述机内码的文章(多为旧文)很多都将读者引导至 GB2312 中提到的概念,我们应该摒弃淡忘这个描述,正确理解机内码是一个分类而非特定的一种编码。提到 GB2312 编码,也应该理解 B0A1 就是“啊”的国标码而不是所谓的“机内码”,别无其它。

5 机外码

机内码:计算机传输存储汉字时使用的编码。国标码(GB2312/18030)中“汉”编码是“BABA”,国际码(Unicode)中“汉”编码是“6C49”等等,都是机内码。

机外码:即人向计算机输入汉字时在键盘上按键的编码。例如输入“汉”,拼音输入时按键 “han”,五笔输入时按键 “ic” 等等,都是机外码;

常见的几种外码如下:

  • 数字编码,比如区位码;
  • 拼音编码,比如全拼、双拼、自然码等;
  • 字形编码,比如五笔、表行码、郑码等。

希望本篇博客能对你有所帮助,也希望看官能动动小手点个赞哟~~。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/748720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT_Creator格式化工具使用

QT_Creator代码格式化工具使用 为了确保代码格式整齐统一,使用代码格式化工具会将写的代码自动格式化以保证格式统一 Astyle: A Free, Fast, and Small Automatic Formatter for C, C, C/CLI, Objective-C, C#, and Java Source Code 一、C和C代码格式化…

C语言实现毕达哥拉斯树 你需要知道的一切!

分形几何学是一门研究不规则几何形态的几何学学科。它涉及数学上基于递归的反馈系统,通过不断迭代的方程式生成分形。尽管分形是数学构造,但它们也存在于自然界中,并因此在艺术作品中得到应用。 计算机的出现为推动分形几何学的发展起到了重…

自己架设的传奇会卡顿、掉线是什么原因?传奇卡顿怎么解决?

自己架设的传奇会卡顿、掉线是什么原因? 【M2相关设置】【怪物刷新】【机器人脚本】【个人定时器】【GOTO的使用】【NPC】【服务器配置】 因为平时接触传奇的用户比较多,所以也会遇到架设的传奇出现卡顿、掉线的情况,这究竟是为什么呢&#x…

迭代器模式:简化集合元素遍历的设计模式

迭代器模式是一种行为型设计模式,它提供了一种遍历集合元素的统一接口,使得我们可以在不暴露集合内部结构的情况下访问集合中的元素。迭代器模式可以简化集合的遍历操作,提高代码的可读性和可维护性。本文将详细介绍迭代器模式的原理、结构和…

java IO流(一) IO流概述 字节流

File类只能操作文件,但是不能操作文件中的内容,IO流则可以对文件或者网络中的数据进行读、写操作。 IO流分为两大派系: 1.字节流:字节流又分为字节输入流、字节输出流 2.字符流:字符流由分为字符输入流、字符输出流 字…

简化生活之让AI以指定格式输出

原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 今天京东也宣布即将发布了自己的大模型,那么使用AI大模型进行工作或者生活将是必不可少的步骤。 建立命令 AI大模型是一种生成式聊天对话模型,我们可以通过预先定义命令的方式…

【C语言】求a的连续和

问题描述 输入两个整数a和n , a的范围是[0,9],n的范围是[1,8],求数列之和S aaaaaa… aaa…a ( n个a )。如a为2、n为8时输出的是222222…22222222的和。 输入格式: 输入在一行中给出两个整数,先后表示a和n。 输出格式: 在一行中输出要求的数…

不会吧,都2023年了,还有人不知道jmeter和locust的区别?

在做性能测试时,通常都会借助一些压测工具来模拟大量的并发用户。目前业界压测工具种类繁多,比如Loadrunner、Jmeter、Locust、Ngrinder、Apache ab、Wrk、Webbench等,其中开源的要以java的jmeter和pythonlocust首当其冲,那么今天…

软件进行压力测试的主要目的

软件进行压力测试是指通过模拟大量用户访问和负载压力,在正常和峰值使用情况下对软件系统进行测试的过程。软件进行压力测试的主要目的是确保软件在实际应用中能够稳定、可靠地运行,满足用户的需求。 首先,软件进行压力测试的主要目的是评估系…

计算机系统结构与操作系统实验三(4-1)-获取物理容量

📍实验要求 获得物理内存容量,代码中共有3种获得物理内存容量方式,程序流程是第1种方式如果失败则采用第2种方式,第2种如果失败则采用第3种,想方法验证最终是采用了哪种方式?给出分析过程 📍实…

Vue封装的过渡与动画

vscode中迅速创建Vue快捷键输入vue回车键即可 动画效果 如果在<transition name"hello"></transition>标签添加name属性&#xff0c;那么css属性名生效就得这样写.hello-enter-active和.hello-leave-active&#xff0c;没有name属性就直接.v-enter-acti…

Mac搭建安卓模拟器(支持M1/M2)

引言 最近在研究Vue打包成app&#xff0c;给我的报价器搞一个移动端&#xff0c;奈何没有安卓手机用于测试。所以想到安装一个安卓模拟器。 看了下目前主流的安卓模拟器基本都不支持Mac版本。网易的mumu目前来看还是只支持Intel芯。 1. 简单版&#xff08;仅M系&#xff09;…

3. CSS三角

网页中常见的一些三角形, 使用CSS直接画出来就可以, 不必做成图片或者字体图标。 CSS三角做法代码: div {width: 0;height: 0;/* 兼顾兼容性 line-height: 0;font-size: 0; */border: 50px solid transparent;border-left-color: pink; }

【Linux】初步理解操作系统和进程概念

一.认识操作系统 操作系统是一款纯正的 “搞管理” 的文件。 那操作系统为什么要管理文件&#xff1f; “管理” 又是什么&#xff1f; 它是怎么管理的&#xff1f; 为什么&#xff1f; 1.操作系统帮助用户&#xff0c;管理好底层的软硬件资源&#xff1b; 2.为了给用户提供一个…

搞清楚@RequestBody和@RequestParam的异同,让你的面试不再被问倒!

大家好&#xff0c;我是小米。今天我要给大家分享一个常见的面试题&#xff1a;“RequestBody和RequestParam之间有什么区别&#xff1f;”这个问题在Java Web开发中非常常见&#xff0c;对于初学者来说可能会有些混淆。那么&#xff0c;让我们一起来揭开这个谜团&#xff0c;深…

浅谈变配电监控系统在某火车站中的应用

安科瑞 华楠 摘要&#xff1a;现代变配电监控系统是利用计算机控制技术、通信技术和网络技术等&#xff0c;对智能变配电设备进行数字化信息采集、处理和传输&#xff0c;从而实现对变配电系统高、低压电气设备的远程监控管理&#xff0c;达到配电室的少人或无人值守的目的&am…

【报错】jar包丢失以及project标签报错解决方案

报错&#xff1a; “dependencies.dependency.version for org.springframework.boot:spring-boot-starter-web:jar is missing” “标记名称: project 描述 : The <project> element is the root of the descriptor. The following table lists all of the possible c…

剑指offer(C++)-JZ41:数据流中的中位数(算法-排序)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 如何得到一个数据流中的中位数&#xff1f;如果从数据流中读出奇数个数值&#xff0c;那么中位数就是所有…

scrapy

scrapy介绍安装--架构 Scrapy 是一个爬虫框架&#xff08;底层代码封装好了&#xff0c;只需要在固定位置写固定代码即可&#xff09;&#xff0c;应用领域比较广泛---》爬虫界的django# 安装 #Windows平台1、pip3 install wheel #安装后&#xff0c;便支持通过wheel文件安装软…

Java的强引用和弱引用

介绍 强引用&#xff1a;引用的对象不会被Java虚拟机强制回收。平时绝大部分对象引用是强引用。 弱引用&#xff1a;在垃圾回收时&#xff0c;弱引用的对象会被Java虚拟机强制回收。 Java API中关于几种引用的类&#xff1a; https://docs.oracle.com/en/java/javase/19/docs…