算是读书笔记吧

二进制编码

二进制和我们平时用的十进制,其实并没有什么本质区别,只是平时我们是“逢十进一”,这里变成了“逢二进一”而已。每一位,相比于十进制下的 0~9 这十个数字,我们只能用 0 和 1 这两个数字。

二进制转十进制

从右到左的第 N 位,乘上一个 2 的 N 次方

0011 =>> 0×2³+0×2²+1×2¹+1×2⁰ = 3

十进制转二进制

用2做短除法

因此13这个十进制数,对应的二进制数,就是 1101。

原码表示法

一个二进制数最左侧的一位,当成是对应的正负号,比如 0 为正数,1 为负数,这样来进行标记。

0011 表示 +3、1011表示 -3

但是对于0:1000 代表 0, 0000 也代表 0。

补码表示法

一个二进制数最左侧的一位,表示-1ⁿ

1011 换算成十进制为:−1×2³+0×2²+1×2¹+1×2⁰=−5

0000 表示 0,1000 在这样的情况下表示 -8。

字符编码

ASCII 码

ASCII 码就好比一个字典,用 8 位二进制中的 128 个不同的数,映射到 128 个不同的字符里。

比如,小写字母 a 在 ASCII 里面,就是第 97 个,也就是二进制的 0110 0001,对应的十六进制表示就是 61。而大写字母 A,就是第 65 个,也就是二进制的 0100 0001,对应的十六进制表示就是 41。

在 ASCII 码里面,0-9每一个数字都对应这一个8位编码。所以很多时候我们在存储数据的时候,要采用二进制序列化这样的方式,而不是直接用CSV 或者 JSON进行存储。

字符集(Charset)

字符集,表示的可以是字符的一个集合

我们日常说的 Unicode,其实就是一个字符集,包含了 150 种语言的 14 万个不同的字符。

随着计算机的普及,越来越多的语言加入了Unicode。

现在,他用32位,4个字节表示一个字符。

字符编码(Character Encoding)

类似一种传输协议,对Unicode编码后的编号进行压缩。

Unicode本身的字符集是32位的,那么每个字符都用4个字节传输,对欧美而言,一下就要用原来ASCII码时代四倍的资源传输或者保存一样的文档。于是,出现了uft-8,utf-16,utf-32这些编码方案。

把字符的代码通过这个编码方式映射成传输时的编码,在使用Unicode字符集保持通用性的同时节约流量和硬盘空间。

UTF-8编码

UFT-8编码可以保证最大限度的节约空间

相对于Unicode这种大家固定的UTF-8的编码称之为变长码。其大受欢迎的主要原因就是对欧美而言,在保留Unicode通用性的情况下避免了流量和空间的浪费。

用UTF-8在接收时,接到一个编码如果是合法的8位编码,就可以直接把它判定为字符,这就给了Unicode字符集在表示英语时和ASCII一样的效率。如果是不合法的,那继续读一个字节,读的两个字节16位如果是合法的,判别为一个字符,再不行继续读下去。

为什么UTF-8成为主流

计算机世界绝大部分传输的都是英文以及数字,编码之后UTF-16要两倍于UTF-8的空间

为什么计算机不直接使用UTF-8进行编码

UTF-8虽然更加节省空间,但是解析起来相对定长编码更加麻烦。

不从头扫描一遍,你不知道第几个字符在哪个位置上,这在处理的时候非常浪费时间。

现在很多语言/程序的处理办法,是使用源于原始UTF-16的一个定长编码,只处理字符码在16位以内的字符,不支持超过16位的罕见字。这种16位定长的编码方式被称为UCS-2。

锟斤拷

锟斤拷,是一串经常在搜索引擎页面和其他网站上看到的乱码字符。乱码源于GBK字符集和Unicode字符集之间的转换问题。

`未知字符` ==(**Unicode**)==> `U+FFFD` ==(**UTF-8**)==>`\xef\xbf\xbd`

`\xef\xbf\xbd\xef\xbf\xbd` ==(**GB2312**)==> `锟斤拷`

GBK

是汉字专用的字符编码方式

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

GBK、GB2312--Unicode--UTF8

UTF8--Unicode--GBK、GB2312

烫烫烫

如果你用了 Visual Studio 的调试器,默认使用 MBCS 字符集。“烫”在里面是由 0xCCCC 来表示的,而 0xCC 又恰好是未初始化的内存的赋值

定点数

一种二进制来表示十进制的编码方式

BCD 编码(Binary-Coded Decimal)

我们把最右边的 2 个 0~9 的整数,当成小数部分;把左边 6 个 0~9 的整数,当成整数部分。这样,我们就可以用 32 个比特,来表示从 0 到 999999.99 这样 1 亿个实数了。

它的运用非常广泛,最常用的是在超市、银行这样需要用小数记录金额的情况里。在超市里面,我们的小数最多也就到分。这样的表示方式,比较直观清楚,也满足了小数部分的计算。

浮点数

float类型

IEEE 的标准

它定义了两个基本的格式

用 32 比特表示单精度的浮点数,也就是我们常常说的 float 或者 float32 类型。

用 64 比特表示双精度的浮点数,也就是我们平时说的 double 或者 float64 类型。

单精度float的表示

单精度的 32 个比特可以分成三部分:

符号位s

1 个比特 -- 记做(−1)^s

有效数位f

23 个比特 -- 记做1.f

指数位e

8 个比特 -- 记做 2^(e)

综合科学计数法,我们的浮点数就可以表示成下面这样:

当然,有一些特殊的表示:

举个例子:

计算一个浮点数

1. 整数部分

与十进制相同。除以 2,然后看余数

2. 小数部分

乘以 2,然后看看是否超过 1。如果超过 1,我们就记下 1,并把结果减去 1,进一步循环操作。

知道结果等于0

比如9.1、整数位9换算成1001。

而小数位0.1:

结果是000110011…这里的“0011”会无限循环下去。所以,这也是为什么0.1无法被正确的表示为浮点数的原因。

1001后拼接上000110011… 也就是 1001.000110011…

进行位移之后为 1.001000110011… × 2^3

什么样的数无法被精准的表示成浮点数

二进制能精确地表示位数有限且分母是2^n的小数

比如1/2、1/4、1/8

他们在乘2的循环中,一定有一次能使结果等于1,从而推出循环。

而且,需要在有限位数内完成循环。毕竟有效数位f只有23个比特。

参考文献

计算机二进制编码原理,计算机组成原理--二进制编码相关推荐

  1. 计算机数字信号原理,计算机网络通信原理数字信号的基带传输.ppt

    计算机网络通信原理数字信号的基带传输 数字通信系统 数字基带传输通信系统 数字频带传输通信系统 模拟信号数字化传输通信系统 第六章 数字基带传输传输系统 数字基带传输概述 数字基带信号的波形和码型 数 ...

  2. 计算机引导原理,计算机启动原理与多重引导.ppt

    计算机启动原理与多重引导 由于主分区表中只能分四个分区, 无法满足需求, 因此设计了一种扩展分区格式. 基本上说, 扩展分区的信息是以链表形式存放的, 但也有一些特别的地方. 首先, 主分区表中要有一 ...

  3. 计算机控制技术原理,计算机控制技术步进电机工作原理课件

    计算机控制技术步进电机工作原理课件 阿迪达斯三条纹标志是由阿迪达斯的创办人阿迪·达斯勒设计的,三条纹的阿迪达斯标志代表山区,指出实现挑战.成就未来和不断达成目标的愿望. • 一.步进电动机的组成和种类 ...

  4. 设计一个模型计算机的原理,计算机组成原理——基本模型机设计与实现

    一.实验目的与要求 (一).实验目的 1.在掌握部件单元电路实验的基础上,将微程序控制器模块与运算器模块.存储器模块组合成一起,组成一台基本模型计算机. 2.用微程序控制器来控制模型机的数据通道. 3 ...

  5. 计算机 程序 原理,计算机储存程序和程序原理是谁提出来的

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 计算机储存程序和程序原理是由美籍匈牙利数学家冯・诺依曼于1946年提出的,意思是把程序本身当作数据来对待,程序和该程序处理的数据用 ...

  6. 平面图形计算机绘图原理,计算机绘图实验

    实验一绘图环境设置及点的位置确定 实验目的:了解计算机绘图的基本原理:熟悉AutoCAD的界面.环境设置.掌握管理图形的方法,掌握工具栏中各按钮的功能及图层的设置.掌握确定点的位置的方法. 实验方式: ...

  7. 计算机主板 原理,计算机主板的工作原理(二)

    许多人在考虑计算机的速度和性能时首先想起的是CPU.处理器越快,计算机的"思考"速度就越快.在个人计算机的早期,所有处理器具有相同的一组针脚将 CPU与主板连接,这称为针脚栅格阵列 ...

  8. 由浅入深讲解显示存储计算机基础原理

    计算机存储原理 计算机在内存中一般都是以1010101二进制的方式 计算机存储的方式一般分为三种 CPU 内存 磁盘 机械盘 固态盘 其中CPU和内存都是断电之后数据就会消失,而磁盘存储断电之后就不会 ...

  9. 计算机地图制图算法与原理重点,计算机地图制图原理概述.ppt

    计算机地图制图原理概述 扫描仪 通过扫描获得的是栅格数据,数据量比较大.如一张地形图采用300dpi灰度扫描其数据量就有20兆左右. 一般对获得的栅格数据还要进行一些后续处理如图象纠正.矢量化 等 扫 ...

  10. 计算机工作在原理课件,滇人版七年级信息技术下册第一单元第一课第三课时计算机工作原理.ppt...

    1 计算机工作原理 一.教学目标: 1.知识目标: (1)掌握计算机工作的几个基本过程: (2)认识冯诺依曼型体系的计算机结构: (3)了解计算机工作原理: 2.能力目标 (1)培养学生研究计算机工作 ...

最新文章

  1. RAID磁盘阵列的原理与RAID0搭建
  2. 网页缩放zoom用法
  3. 计算机常考应用分析题,计算机常见故障及排除
  4. Spring - Java/J2EE Application Framework 应用框架 第 11 章 使用ORM工具进行数据访问
  5. C++ Primer 5th笔记(chap 17 标准库特殊设施)smatch
  6. Elasticsearch索引分析
  7. eclipse自动补全的设置
  8. redis配置文件讲解
  9. Python-OpenCV中的cv2.threshold
  10. RNN-GRU-LSTM变体详解
  11. 日语专业双学位选计算机,湖北师范大学计算机科学与技术(日语双学位)专业2015年在湖北理科高考录取最低分数线...
  12. 电脑太慢了最简单的办法怎么弄_修电脑不求人—最实用办公室电脑故障及解决办法,办公室人都说好...
  13. C语言:文章各类字符数统计
  14. html关于点击radio触发事件
  15. 人类一败涂地mac版(human fall flat中文版)
  16. java语言编程入门
  17. 软考科目那么多,该报哪个?
  18. 玩转Spring Cache --- 整合进程缓存之王Caffeine Cache和Ehcache3.x【享学Spring】
  19. jquery.flot 在节点上显示提示
  20. WIN32开发之LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

热门文章

  1. 3---IO流练习题库
  2. Java Stream API概述
  3. 微信聊天内容制作生成器微信小程序源码/支持多种制作生成
  4. 怎样设置网络工作组计算机,如何建立计算机工作组?
  5. 【论文阅读|ICML2020】When Does Self-Supervision Help Graph Convolutional Networks?
  6. tplink软件升级有用吗_tplink路由器固件更新的方法
  7. 快速学会CC2530单片机基础点灯
  8. iGoogle自定义
  9. html播放器参数,sewise HTML5开源播放器参数说明
  10. Android实现60秒倒计时