首页 > 其他分享 >计算机数据的表示

计算机数据的表示

时间:2023-10-26 15:13:02浏览次数:28  
标签:表示 字符 计算机 16 二进制 汉字 base 数据 字节

计算机数据的表示

1. 数值数据的表示

1.1 各种进制数的表示

  • 二进制 (Binary) :以 0b0B 开头,字符仅含0和1.

    • 用下标2或者数字后面加B表示。如 $(1011)_2$ 或 $1011B$
  • 八进制 (Octal) :以 0o0O 开头,字符含0-7.

    • 用下标8或者数字后面加O表示。如 $(17)_8$ 或 $17O$
  • 十六进制 (Hexadecimal) :以 0x0X 开头,字符含0-9、a-f(代表10-15).

    • 用下标16或者数字后面加H表示。如 $(a1b1)_{16}$ 或 $a1b1H$

1.2 进制转换

R进制与十进制的转换

  • R进制转十进制:按位权展开。计算每位数字与该位位权乘积的代数和然后相加。
  • 十进制转R进制:除以 R 逆序取余。

二、八、十六进制互转

  • 二转八进制:从右往左每三位转一位八进制,最左边不足三位添0补齐。反之八进制每一位转三位二进制。

  • 二转十六进制:从右往左每四位转一位十六进制,最左边不足四位添0补齐。反之十六进制每一位转四位二进制。

python中的相关函数:

  1. int(*x*,base=10)

    这个函数按照base进制对数x进行解释,返回一个使用数字或字符串生成的整数int对象,无实参返回0。

    其中x数字或字符串base为进制,取值范围为[2,36]和0。

    一个进制为n的整数包含0到n-1的整数,其中a-z(A-Z)表示10到35。

    进制为0将会按照x字面的前缀进行解释,结果是2、8、10、16中的一个。

要清楚的一点是,在python中带有前缀的数字,例如0xa0o120b1010它们的类型(type)都是 int 整数类型。
如果想知道它们十进制数值,可以直接print,或 print(int(x)) ,也可以 int(str(x),base=0)(?).

对这个函数的使用,主要分为三种情况:

  • x为int类型:无论带不带前缀,这个数的进制已经清楚,它表示一个确定大小的数字。该函数无法对一个进制清楚非字符串类型进行转换(启用base关键字)。
  • x为str字符串类型:
    • 带前缀:表明这个数的进制已经清楚,base只能等于其前缀或0。
    • 不带前缀:根据用法自由发挥。注意没有前缀且令base=0的话应注意x其形式。比如int("010",base=0)是非法的。因为解释器认为x是十进制数,但x形式是错误的。
  • x为byte类型:暂时空缺。
x=int(156,base=2) #报错
x=int(0x156,base=0) #报错

x1="0101" #字符串
y1=int(x1,base=2) # 结果为整数5
y2=int(x1,base=8) # 结果为整数65
y3=int(x1,base=16) # 结果为整数257
y4=int(x1,base=35) # 结果为整数1226

x2="0xa5f1"
y5=int(x,base=16) # 结果为整数42481
y6=int(x,base=0) # 结果为整数42481
  1. hex(x)

将整数转换为以0x为前缀的十六进制字符串

  1. bin(x)

将整数转换为以0b为前缀的二进制字符串

  1. oct(x)

将整数转换为以0o为前缀的八进制字符串

1.3 机器码的表示

计算机中数的主要类型

  • 整数(定点数)
    • 无符号整数
      • 8位($0~2^{8}-1$)
      • 16位($0~2^{16}-1$)
      • 32位($0~2^{32}-1$)
    • 有符号整数
      • 8位($-27~2-1$)
      • 16位($-2{15}~2-1$) 16位整数
      • 32位($-2{31}~2-1$) 短整数
      • 64位($-2{63}~2-1$) 长整数
  • 浮点数
    • 32位(单精度浮点数)
    • 64位(双精度浮点数)
    • 128位(扩充精度浮点数)

真值、字长、机器数

  • 机器数:0或1 + 二进制绝对值

    • 计算机不认识除了0和1之外的任何符号,因此要专门留出一位用来表示正负号。
    • 将符号数字化的数,是数字在计算机中的二进制表示形式。
  • 真值:正负号 + 二进制绝对值

    • 计算机中的二进制机器数分为“有符号数”和“无符号数”两种。
    • “无符号数”就是二进制数的每一位都代表对应位的数值;而在“有符号数”中规定最高位用来表示数据符号,其中1代表负,0代表正,这样一来机器数本身就不等于真正的数值了。例如有符号数10000101,其最高位1代表负,所以余下的“0000101”才是数值本身,所以其真正数值是-5,而如果是无符号数,则10000101所代表的是133。为区别起见,把带符号位的机器数所对应的真正数值称为机器数的“真值”。例:00100001的真值=0 0100001=+33(正号可以不写,可以直接写成33),10100011的真值=1 0100011=-35。
  • 字长

    • :指计算机进行数据处理时,一次存取加工和传送的数据长度(字长度)。一个字通常是字节的整数倍。

    • 字长 是指计算机一次可处理的二进制数的码位长度,是计算机进行数据存储和数据处理的运算单位。如我们通常所指的32位处理器,就是指该处理器的字长为32位,也就是一次能处理32位二进制数。通常称16位是一个字,32位是一个双字,64位是两个双字。

    • 数值的转换结果是与字长有关的。如果计算机字长为8位,十进制中的数+5转换成二进制就是00000101,-5转换成二进制就是10000101;但如果字长是16位,+5转换的结果就是00000000 00000101,而-5转换成二进制就是10000000 00000101了。也就是对应的机器数要转换为字长所代表的位数。

    • 字长越长代表计算机的处理能力越强,可以处理的数越大。

      • 在8位字长中,除去符号位,实际可以处理的数值大小范围为[-127,-0]~[+0,127](即$2^7 -1$),共256个数。

      • 16位字长可以处理的数值大小是[-32677,-0]~[0,32767]($2^{15} -1$)。

      • 64位字长计算机可以处理的二进制数码位长度最大为64位,去掉符号位,则表示计算机可以处理的最大二进制数为 $2^{63}-1$,最小二进制数就是 $-2^{63}$。

    • 注意 以上的“-0”与“0”的机器数是不一样的,在8位字长中,-0为1 0000000,而+0为0 0000000;在16位字长中,-0为1 0000000 00000000,而+0为0 0000000 00000000。所以在二进制的机器数中,0也有两个(-0和0),且表示形式并不一样。

设机器字为8b字长,数N1的真值为 +1001110,数N2的真值为 -1001110,则N1、N2对应的机器数为:
01001110
11001110

原码表示法

符号位加数值的二进制。

有正零和负零之分。

反码表示法

  • 正数的补码、反码和原码都相同

  • 负数的符号位与原码、补码相同,数值将原码的数值位按位取反。

补码表示法

原码的计算不方便,因此引入补码的概念

  • 正数的补码、反码和原码都相同

  • 负数的的补码是先把除符号位外其他各位取反,再在末位加1。

TH 定点整数 定点小数
原码 $-(2{n-1}-1),2-1$ $(-1,1)$
反码 $-(2{n-1}-1),2-1$ $(-1,1)$
补码 $-2{n-1},2-1$ $[-1,1)$
  • 运算前将所有参与运算的数据转换为补码
  • 将转换后的数值进行运算
  • 运算结果再次求补码,得到最后的结果

移码表示法

1.4 二进制逻辑运算

  • 与运算 AND

    • 又称逻辑乘。用符号$\land$ 或 ·表示
      对应位均为1结果才为1.
  • 或运算 OR

    • 又称逻辑加。用符号 $\lor$ 或+表示
      对应位有一个为1结果就为1.
  • 非运算 NOT

    • 按位取反
  • 异或运算 XOR

    • 用符号$\bigoplus$ 表示
      对应位相同结果为0 ,不同结果为1。

2. 非数值数据的表示

  • 非数值数据:文字和符号(字符)、图像、声音等
  • 非数值数据的表示:对其进行二进制编码。任何数据存储到计算机中都是二进制数。

字符编码

  • 编码:编码是将源对象内容按照某种标准转换为另一种格式内容。解码是和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容。
  • 码点:一个编码表中的某个字符对应的代码值。比如ASCII中字符 A 的码点是65
  • 字符集:某种编码标准所支持的所有字符及其对应码点的集合。(书写系统字母与符号的集合)
    • 字符编码:字符到存储在计算机上的内容(特定的字节或字节序列)之间的映射,是一种规则。通常特定的字符集采用特点的编码方式。一种字符集可能有多种编码方案,比如 utf-8utf-16

ASCII码

常用的7位 $ASCII$ 码(American Standard Code for Information Interchange码,即美国信息交换标准代码)的每个字符都由7个二进制位b6~b0 表示,有128个编码,最多可表示128种字符。其中包括:

  • 10个数字09:30H~39H,48~57(十进制);
  • 26个小写字母az:61H~7AH ,97~122;
  • 26个大写字母AZ:41H~5AH ,65~90;
  • 各种运算符号和标点符号等。

在计算机中,用1B(一个字节)表示一个ASCII码,其最高一位(b7位)填0,余下的7b可以给出128个编码,表示128个不同的字符和控制码。

其中95个编码,对应着计算机终端能敲入并且可以显示的95个字符,打印机设备也能打印这95个字符,如大小写各26个英文字母,0—9这10个数字符,通用的运算符和标点符号+,-,*,/,>,=,< 等等。

UTF-8编码

  • Unicode字符集
    • 在Unicode中,每个字符占据一个码位/Unicode 编号(用4位十六进制数表示,Code point:U+ FFFF),字符集中的字符与Unicode 编号一一映射。如 U+ 0000 为“Null”,U+ 597D=""。Unicode字符集共定义了 1 114 112 个这样的位,使用从0到10FFFF的十六进制数唯一地表示世界上几乎所有字符。NCR(Numeric Character Reference),以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。

由于计算机存储数据通常是以字节为单位的,而且出于兼容之前的ASCII(0x00-0x7F)、节省存储空间等诸多原因,需要一种具体的编码方式来对字符码位进行标识。规定每个字符的Unicode编号如何存储(用一个字节还是多个字节存储,用哪些字节来存储),常见的基于Unicode字符集的编码方式有UTF-8UTF-16UTF-32

同一段二进制,每一个字节一个编号还是每两个字节一个编号,解码方式不一样,得到的编号不一样,对应的映射字符也不同,这就是乱码的原因。“锟斤拷”、“烫”就是这样来的。

汉字编码

对于汉字,计算机的处理技术必须解决三个问题:

  • 汉字输入
  • 汉字储存与交换
  • 汉字输出

它们分别对应着汉字输入码、内码、字模码的概念。
因此,汉字编码系统存在以下三种编码:

  1. 汉字输入码
  2. 汉字内码
  3. 汉字字模码

汉字输入码

汉字输入码也称 外码 ,是为了将汉字输入计算机而编制的代码,是代表某一汉字的一串键盘符号。
汉字输入码种类:

  • 数字编码:如区位码、国标码、电报码等。
  • 拼音编码:如全拼码、双拼码、简拼码等。
  • 字形编码:如王码五笔、郑码、大众码等。
  • 音形编码:如表形码、智能ABC等。

两种典型的数字编码:

  • 区位码:是将国家标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。
    • 例如“中”字位于54区48位,“中”字的区位码即为“5448”。
  • 国标码:将区位码加2020H,占用两个字节。
    • 例如“中”字的国标码为区位码5448的区码和位码转化为16进制,为3630H,再加2020H得国标码5650H。
  • 汉字字符集与编码
    • 1981年,GB2312-80国家标准,其字符及编码称为国标码又叫国际交换码。
    • GB2312字符集的构成:
      一级常用汉字3755个,按汉语拼音排列
      二级常用汉字3008个,按偏旁部首排列
      非汉字字符682个
      一般用2个字节来存放汉字;
      汉字分区,每个区94个汉字;

汉字内码

汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。

  • 汉字可以通过不同的输入法输入,但其内码在计算机中是唯一的。

  • 英文字符的机内代码是7位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。

  • 机内码等于汉字国标码加上8080H。

    • 例如“中”字的机内码为5650H+8080H=D6D0H。

汉字字模码

汉字字模码又称汉字字形码,它是将汉字字形经过点阵数字化后形成的一串二进制数,用于汉字的显示和打印。

  • 根据汉字输出的要求不同,点阵有以下几种:

    • 简易型汉字:16×16, 32字节/汉字
    • 普通型汉字:24×24, 72字节/汉字
    • 提高型汉字:32×32,128字节/汉字。
  • 汉字字库:将所有汉字的字模点阵代码按内码顺序集中起来,构成了汉字库。

  • 汉字字形点阵中每个点的信息用一位二进制码来表示,“1”表示对应位置处是黑点,“0”表示对应位置处是空白。
    例如16×16点阵,每个汉字就要占32个字节

image

image

标签:表示,字符,计算机,16,二进制,汉字,base,数据,字节
From: https://www.cnblogs.com/zeroy610/p/17789448.html

相关文章

  • Vue localStorage 将数据存为数组
    VuelocalStorage将数据存为数组要把表单数据存成数组形式,在另一个页面通过v-for渲染展示,因为拥有同一个key值,在每次更新表单数据时都会发生数据覆盖现象。vartemplist=JSON.parse(localStorage.getItem("msgBody")||"[]");templist.push(this.msgBody);......
  • NLTK debug记录——"[nltk_data] Error loading xxx"下载数据集失败
    问题:运行nltk.download("xxx")时遇到连接下载失败Error解决:在gitee上下载对应的.zip词库包(如,nltk_data/pakages/copora/目录下的下载链接);NLTK下载数据集时会自动搜索某些以./nltk_data/为结尾的目录(见附注),找到一个这样的目录并确保自己有写这个目录的权限,如果上一层目录下没有n......
  • MySQL建数据库排序规则选择
    MySQL建数据库排序规则选择引言在MySQL数据库中,选择适合的排序规则对于数据的存储和检索非常重要。排序规则决定了字符比较的方式,影响数据库的数据排序和查询结果。本文将介绍MySQL中常见的排序规则,并提供相应的代码示例来帮助读者理解和选择适合自己需求的排序规则。排序规则......
  • zblog数据库结构 表和字段详解
    表结构说明:表名储存信息zbp_category分类表zbp_comment评论表zbp_config插件配置表zbp_member用户表zbp_module模块表zbp_post文章表zbp_tag标签表zbp_upload附件表分类表:zbp_category表数据结构CREATETABLEzbp_category(......
  • Nacos单机模式配置远程数据源、配置身份认证
    1.nacos介绍官网链接:https://nacos.io/zh-cn/docs/what-is-nacos.htmlGithub:https://github.com/alibaba/nacos/Nacos/nɑ:kəʊs/是DynamicNamingandConfigurationService的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于......
  • # yyds干货盘点 # Python实现excel工作簿中单元格底色为黄色的数据筛选
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个pandas数据提取的问题,一起来看看吧。大佬们请教个问题有没有什么办法可以实现 excel工作簿中单元格底色为黄色的行筛选出来 当行只要有一个单元格标黄了当行数据筛选出来?二、实现过程这里【......
  • 使用DataEase 关联数据集制作宽表
    添加数据源支持多种数据源两种连接方式两种差异:如果数据集为【直连】模式,那么没有【更新信息】模块,数据实时获取;如果数据集为【定时同步】模式,可通过【更新信息】设置定时任务,更新数据。直连模式同步模式https://dataease.io/docs/installation/installation_mode/?h=de_engine_m......
  • Python实现excel工作簿中单元格底色为黄色的数据筛选
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个pandas数据提取的问题,一起来看看吧。大佬们请教个问题有没有什么办法可以实现 excel工作簿中单元格底色为黄色的行筛选出来 当行只要有一个单元格标黄了当行数据筛选出来?二、实现过程......
  • 第一个python程序-计算机
    defadd(num1,num2):returnnum1+num2defsub(num1,num2):returnnum1-num2defmul(num1,num2):returnnum1*num2defdiv(num1,num2):returnnum1/num2calc={1:add,2:sub,3:mul,4:div}print('欢迎使用计算器!')fst_num=flo......
  • MySQL学习(9)统计数据
    存储方式MySQL提供了两种存储统计数据的方式,分别是永久性地存储统计数据和非永久性地存储统计数据,分别存储在磁盘和内存中。系统变量innodb_stats_persistent用来控制统计数据存储在哪里。值为OFF表示存储在内存,值为ON表示存储在磁盘。SHOWVARIABLESLIKE'innodb_stats_persi......