二进制编码

计算机中信息表示

不羁的心 提交于 2019-12-04 01:44:19
1、概述 现在的我们无时无刻不在接触计算机,即常说的电脑。计算机能干很多事,比如浏览网页、看视频、玩游戏、办公等,实现这些功能都需要计算机有信息存储和处理的能力。 现代计算机的信息存储和处理都以二进制为基础 ,简单来说我们在电脑上看到的信息(比如文字、图片、音频、视频)都是以二进制表示的形式存储在计算机上或被计算机以二进制这种形式处理的。比如我们在计算机上的记事本中写日记,写入的是中文,在计算机中是以二进制编码(01010......)存储的,同时会给这些二进制编码指定一种解释方式,比如GB2312编码等,这样日记显示在屏幕上的才是中文。 为什么计算机选择二进制存储和处理信息?主要原因是二进制容易被电子元件表示、存储和传输,比如可以以电压高低表示0/1,或以磁场的方法顺时针和逆时针表示0/1等。我们日常使用十进制表示数字,原因是每个人都有十个手指或十个脚趾,使用十进制符合我们大部分人的认知,也方便日常使用。 1.1 计算机存储和表示的基本单位 计算机中存储和表示数据的基本单位是 位 (bit) ,和我们平常在十进制中所说的位概念相同,比如个位、十位、百位等。二进制中每位的取值范围是0或者1。 计算机中每8位代表一个字节(byte),即 1byte = 8bit,这是计算机中的常用存储大小单位。比字节大的还有KB、MB、GB、TB、PB、EB,其换算关系如下: 1KB = 1024B

关于补码的由来和作用

 ̄綄美尐妖づ 提交于 2019-12-03 14:49:57
最近在读《深入理解计算机系统》(CSAPP),第二章中关于补码的描述很有意思,在书中并没有详细叙述补码的由来和为什么要使用补码来表示有符号数,而不是用原码和反码。相反这本书详细的叙述了补码的数学表示,以及公式的推导!对补码的由来却一笔带过,甚至原码和反码只是简单的在后面的篮框提示中提了一下,根本没有出现在正文。 这在一定程度上造成了我的阅读困难,于是在搜索引擎的帮助下,我查了很多资料,了解到补码的更多细节,以及这个神奇的编码方式如何帮助人们设计CPU时节省大量的精力和金钱。这里我把他记录下来。 计算机中的信息都是用二进制表示的,在表示无符号数时并没有什么问题,但是在表示有符号整数时就出现了问题,如何在二进制中区分正数与负数呢? 区分正数和负数的另一个意义在于如果能够准确的表示出、负数,我们就可以化减法为加法,如5-4就可以表示为5+(-4),至于为什么那么多先辈要执着于把减法化为加法,原因很简单,对计算机的电路而言,计算加法要比计算减法方便的多。 很多人提出了有符号整数的编码方式,其中有: 原码 (Sign-Magnitude)、 反码 (ones' Complement)、 补码 (two's Complement)。 原码 原码的英文为sign-magnitude,第一个单词为符号的意思,第二个单词经过查询有“大小”的意思,大意应该为 符号-数值 的组合,在原码中

刨根究底字符编码之十四——UTF-16究竟是怎么编码的(“代理区(Surrogate Zone)”,范围为0xD800~0xDFFF(十进制55296~57343),共2048个码点未定义。UTF8和UTF32没有这个问题)

[亡魂溺海] 提交于 2019-12-03 08:56:13
1. 首先要注意的是,代理Surrogate是专属于UTF-16编码方式的一种机制,UTF-8和UTF-32是不用代理的。 如前文所述,为了让UTF-16能继续编码基本平面后面的增补平面中的码点值,于是扩展了UTF-16编码方式。 具体的扩展方法就是为其增加了代理机制,用两个对应于基本平面码点(即BMP代理区中的码点)的16位码元来表示一个增补平面码点,这两个用来表示一个增补平面码点的特殊16位码元就被称为“代理对”。 如果要用简单的一句话来概括,就是——所有大于0xFFFF的码点值(即增补平面码点编号,范围为0x10000~0x10FFFF,十进制为65536~1114111;注意,0xFFFF是十六位二进制数的最大值的十六进制表示)要编码成UTF-16编码方式的话,就必须使用代理机制(也就是用代理对来表示)。 2. 在UTF-16编码方式中,被合起来称为“代理对”的这两个16位码元就其中的任一单个码元而言,其实就直接对应于基本平面BMP中的某一个码点(即BMP中每一个码点的值必然对应于一个16位码元的值,因为基本平面中的码点总数为2^16=65536个,而16位码元能表示的值也等于2^16=65536个)。 这样一来,就产生了冲突:某个UTF-16码元到底是用于表示基本平面字符的码元,还是用于表示增补平面字符的代理对中的代理码元? 因此,为避免冲突,这些被用作“代理

字符的编码方式

丶灬走出姿态 提交于 2019-12-03 03:36:53
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出 256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 0000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 2、非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。 于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使 用的编码体系,可以表示最多256个符号。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如

小鼠试毒问题(二进制)

折月煮酒 提交于 2019-12-03 01:48:47
1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒? 如题。 分析思路: 要用尽可能少的老鼠完成相对大的任务量,要想到把问题进行对数分解。 从而不难想到 210=1024 2^{10}=10242 10 =1024 这个数量关系。 解法一: 二进制编码。 首先对1000桶酒按照1~1000进行二进制编码,因为 210 2^{10}2 10 = 1024 > 1000,因此需要10位二进制。 故只需要取10只老鼠,每只老鼠只喝其对应位数为1的编号的酒。 然后给10只老鼠按以下编码: 第一只 0000000001 第二只 0000000010 第三只 0000000100 … 第十只 1000000000 结果举例:编号为1000100011的酒是毒酒。 则对应喝酒的只有第一只,第二只,第六只,第十只死亡。 故最后可从哪几只老鼠死亡来判断毒酒的编号是多少。 ———————————————— 版权声明:本文为CSDN博主「ChanYipFan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_43530726/article/details/87920137 来源: https://www.cnblogs.com/sunlong88/p

Unicode,UTF-32,UTF-16,UTF-8

匿名 (未验证) 提交于 2019-12-03 00:34:01
我们通常说的Unicode是一个字符集,在这个字符集中每个字符都有对应的唯一十六进制值。 Unicdoe字符集包含了全球所有的字符,所以它的体积较为庞大,如此便分为了17个平面。 17个平面中第一个平面为基本平面(BMP),剩下的16个为辅助平面(SMP)。 基本平面的字符对应十六进制值的区域为 0x0000~0xFFFF ,辅助平面中的字符对应十六进制值的区域为 0x010000~0x10FFFF 查看完整的Unicode字符集( 地址1 , 地址2 ) UTF-32 UTF-32实质是一种重新编码计算的方式,是依附于Unicode字符集的。以Unicode字符集为参考基础,对其中的字符所对应的十六进制值进行重新计算获取一个新的十六进制值。如果我们对Unicode字符集中的所有字符都进行了UTF-32编码,那获得的值组合起来就可以说是一个UTF-32字符集了。 UTF-32的编码方式就是将 Unicode字符集中的字符对应的十六进制变为4个字节存储。 例如: 0x0000 => 0x00000000 0x1EC0 => 0x00001EC0 0xFFFF => 0x0000FFFF 0x010000 => 0x00010000 0x10FFFF => 0x0010FFFF 注:Unicdoe字符集中的十六进制值暂时不清楚是几个字节,但是UTF-32编码后

字符编码和文件处理

匿名 (未验证) 提交于 2019-12-02 23:45:01
计算机运行的三大核心硬件 任何一个程序要想运行必须先由硬盘加载到内存,然后去CPU取值执行。 运行着的应用程序产生的数据,必须先存到内存。 字符编码 字符编码针对的是文字 文本编辑器的输入和输出是两个过程,人在操作计算机的时候输入的是人能够看懂的字符,但是计算机只能识别010101这样的二进制数据,那么 输入的字符 >>>(字符编码表)>>> 二进制数字 字符编码表就是字符与数字的对应关系 a 0 b 1 a 00 b 01 c 11 d 10 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符) 后来为了将拉丁文也编码进了ASCII表,将最高位也占用了 阶段二:为了满足中文,中国人定制了GBK GBK:用2Bytes表示一个中文字符 还是用1Bytes表示一个英文字符 为了满足其他国家,各个国家纷纷定制了自己的编码 日本把日文编到 Shift_JIS 里,韩国把韩文编到 Euc-kr 里 阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。 于是产生了unicode, 统一用2Bytes代表一个字符, 2**16-1=65535,可代表6万多个字符,因而兼容万国语言 但对于通篇都是英文的文本来说

Python文件操作

匿名 (未验证) 提交于 2019-12-02 22:56:40
本文主要记录Python中的文件的常用操作 1.文件操作的流程 1)打开文件,得到文件句柄并赋值给一个变量 2)通过句柄对文件进行操作 3)操作完成,关闭文件 2.打开文件的常用模式 有以下2个示例文件: # hello_gbk.txt文件为GBK编码,hello_utf8.txt文件为utf-8编码 Somehow, it seems the love I knew was always the most destructive kind 不知为何,我经历的爱情总是最具毁灭性的的那种 Yesterday when I was young 昨日当我年少轻狂 The taste of life was sweet 生命的滋味是甜的 As rain upon my tongue 就如舌尖上的雨露 I teased at life as if it were a foolish game 我戏弄生命 视其为愚蠢的游戏 View Code 2.1.一般模式 "r"ģʽ #"r"只读模式,是默认模式,默认编码是gbk,不可写 # print(f.read(10))      # 默认读全文,可以按照指定字符数量读文件内容 # print(f.readline(10))    # 默认读取一行,遇到\r或者\n为止,适合读小文件,也可以按照指定字符数量读文件内容 # print(f

mysql配置文件

狂风中的少年 提交于 2019-12-02 19:57:10
[client] 客户端设置,即客户端默认的连接参数 port = 3306 默认连接端口 socket = /usr/local/mysql/data/mysql.sock 用于本地连接的socket套接字 default-character-set = utf8mb4 编码 [mysqld] 服务端基本设置 port = 3306 MySQL监听端口 socket = /usr/local/mysql/data/mysql.sock 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件 pid-file = /usr/local/mysql/data/mysql.pid pid文件所在目录 basedir = /usr/local/mysql 使用该目录作为根目录(安装目录) datadir = /usr/local/mysql/database 数据文件存放的目录 tmpdir = /usr/local/mysql/data/tmp MySQL存放临时文件的目录 character_set_server = utf8mb4 服务端默认编码(数据库级别) collation_server = utf8mb4_bin 服务端默认的比对规则,排序规则 user = root MySQL启动用户。如果是root用户就配置root,mysql用户就配置mysql log

计算机基础2

余生长醉 提交于 2019-12-02 16:47:22
python是编程语言 语言 一种事物与另外一种事物沟通的介质 所以说编程语言是程序员与计算机沟通的介质 什么是编程: 就是程序员用计算机所能理解的表达方式(编程语言)把自己的思维逻辑写下来,编程的结果就是一堆文件 什么要编程? 或者说为什么要和计算机沟通,让计算机按照人的逻辑执行程序,取代并解放人力 完整的计算机系统 3层结构 应用程序 (不能直接操作硬件,如果要操作硬件,需要向操作系统层发出请求) 操作系统 (往上服务于应用软件,往下控制硬件) 计算机硬件 五大组成 控制器:统筹规划硬件与软件的运行,调控计算机各组成部分协调合作 运算器:可以完成数据的 算数运算 与 逻辑运算,得到想要的结果 存储器:需要再次使用的数据可以通过存储器进行 临时 或 永久存储 - 内存: 基于电工作,通电能存数据,断电数据消失 - 外存: 外部存储(硬盘),永久保存数据 输入input设备:将外界的信息,通过输入设备,提供给计算机 输出output设备:从计算机内部提前想要的数据 数据的处理流程 数据先通过输入设备到内存,然后CPU从内存里取出数据在进行处理,最后处理完的数据给到内存,内存给到输出设备显示 计算机三大核心 cpu: 中央 控制器 + 运算器 内存:临时存储数据,断电后消失 硬盘:永久存储数据,断电后还拥有 CPU 控制器+运算器=CPU 功能: 控制+运算 工作方式: 取值---