明明和白白玩数字密语游戏他们开始都报1,以后明明抱报的数,每次都比前一次多3,白

  • 2048中数字密语传奇游戏规则

2048中数字密语传奇游戏规则大全汇集了所有的2048中数字密语传奇游戏规则下载资源不断更新最新最热门的2048中数字密语传奇游戏规则信息,包括2019最好玩的2048中数字密语传奇游戏规则前十名排行玩家们可以在这个专题找到自己喜欢的游戏,众多2048中数字密语传奇游戏规则优质资源欢迎免費下载!

2048中数字密语传奇游戏规则游戏排行榜

  • 数字密语英雄是一款全新卡牌游戏。游戏以穿越二次元为背景融入死神,火影忍z者拳皇,超级英雄海贼王等多个动漫题材...

  • 《神奇数字密语》是一个快乐的游戏,供孩子们学习从1到10的计数 在和这些数字密语小人物一起玩的時候,你的孩子将学习...

  • 数字密语密语游戏是一款是一款非常有趣的休闲向冒险闯关类小游戏这款游戏的画面风格制作非常精美,种类繁哆整体上,游...

  • 这是一个数字密语棒球应用程序增加你的判断,认知和记忆 它将随机生成的数字密语组合起来以精确匹配数字密语的數量,从而可...

  • 水桶学习- 是有趣的免费的游戏为孩子,学龄前儿童和所有有趣的人 - 它有助于您或您的孩子学习区分不同的颜...

  • 规则是一款非常激情刺激的***战动作类型的,玩家在中能够感受到最激情的射击盛宴经典刺激的电视剧情百分百还原,让你...

  • 动动指尖让色彩与数芓密语正确相连!这是一款看似简单的小游戏,随着关卡的推进您可能需要动一点脑力才能突破!

  • 伊斯坦堡数字密语版破解版是一款极致烧脑的棋盘对战手机游戏,游戏中玩家将会不断的在游戏的地图中进行相互的交叉每一个...

  • 数X,一个简单的但令人上瘾的人数谜。 让峩们来创建你的唯一编号X.

  • 学龄前儿童的教育游戏“学习数字密语” - “有趣的数字密语” - 游戏帮助孩子学习区分不同的数学符号和数字密语  *发...

1.第一堆有17颗草莓第二堆有15颗草莓,把它们装在4个盘子里平

均每个盘子里装几个草莓?

2.小聪去超市买薯条每袋2元,买6袋如果小聪给营业员20元,应

3.小华看一本82页的《童话故事》已经看了26页。剩下的每天看7页

4.有28个梨,最少拿走几个就使得6个小朋友分得一样多?

5.小明:“我们5人买的团体票共花了45元”笑笑说:“我们5人买的是

个人票,每人10元”谁买的便宜?每张票少花多少钱

6.育才小学有男生356人,女生比男生4少人女生有多少人?全校共有

7.学校图书馆有故事书和漫画书共2000本故事书借阅出216本,漫画

书借阅出297本故事书和漫画书共借阅出多少本?

8.工人叔叔要修一条長100千米的公路已经修64千米,剩下的每天修9

千米还要修多少天才能完成任务?

9.1张彩纸可以做8个风车要做54个风车,至少需要几张纸

10.一個星期有7天,三月份有31天三月份有多少个星期,还有几天

11.王小家到学校有60米,一次上学走了8米又回家拿伞再到学校去他

12.3只小鸡放进┅个箱子里,有20只小鸡需要准备几个箱子

13.小熊画了34张画,每个小伙伴分6张可以分给几个小伙伴?还余下

14.有4个西瓜每个西瓜切成9块,囿40个同学分吃每人一块,还差

上算法和数据结构课的时候老師们都会和你说,程序 = 算法 + 数据结构如果对应到组成原理或者说硬件层面,算法就是我们前面讲的各种计算机指令数据结构就对应我們接下来要讲的二进制数据。

众所周知现代计算机都是用 0 和 1 组成的二进制,来表示所有的信息前面几讲的程序指令用到的机器码,也昰使用二进制表示的;我们存储在内存里面的字符串、整数、浮点数也都是用二进制表示的万事万物在计算机里都是 0 和 1,所以呢搞清楚各种数据在二进制层面是怎么表示的,是我们必备的一课

大部分教科书都会详细地从整数的二进制表示讲起,相信你在各种地方都能看到对应的材料所以我就不再啰啰嗦嗦地讲这个了,只会快速地浏览一遍整数的二进制表示

然后呢,我们重点来看一看大家在实际應用中最常遇到的问题,也就是文本字符串是怎么表示成二进制的特别是我们会遇到的乱码究竟是怎么回事儿。我们平时在开发的时候所说的 Unicode 和 UTF-8 之间有什么关系。理解了这些相信以后遇到任何乱码问题,你都能手到擒来了

理解二进制的“逢二进一”

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

任何一个十进制的整数都能通过二进制表示出来。把一个二进制数对应到十进制,非常简单就是把从右到左的第 N 位,乘上一个 2 的 N 次方然后加起来,就变成了一个十进制数当然,既然二进制是一个面向程序员的“语訁”这个从右到左的位置,自然是从 0 开始的

对应地,如果我们想要把一个十进制的数转化成二进制,使用短除法就可以了也就是,把十进制数除以 2 的余数作为最右边的一位。然后用商继续除以 2把对应的余数紧靠着刚才余数的右侧,这样递归迭代直到商为 0 就可鉯了。

比如我们想把 13 这个十进制数,用短除法转化成二进制需要经历以下几个步骤:

因此,对应的二进制数就是 1101。

刚才我们举的例孓都是正数对于负数来说,情况也是一样的吗我们可以把一个数最左侧的一位,当成是对应的正负号比如 0 为正数,1 为负数这样来進行标记。

这样一个 4 位的二进制数, 0011 就表示为 +3而 1011 最左侧的第一位是 1,所以它就表示 -3这个其实就是整数的原码表示法。原码表示法有┅个很直观的缺点就是0 可以用两个不同的编码来表示,1000 代表 0 0000 也代表 0。习惯万事一一对应的程序员看到这种情况必然会被“逼死”。

於是我们就有了另一种表示方法。我们仍然通过最左侧第一位的 0 和 1来判断这个数的正负。但是我们不再把这一位当成单独的符号位,在剩下几位计算出的十进制前加上正负号而是在计算整个二进制值的时候,在左侧最高位前面加个负号

=?5=?5。如果最高位是 1这个數必然是负数;最高位是 0,必然是正数并且,只有 0000 表示 01000 在这样的情况下表示 -8。一个 4 位的二进制数可以表示从 -8 到 7 这 16 个整数,不会白白浪费一位

当然更重要的一点是,用补码来表示负数使得我们的整数相加变得很容易,不需要做任何特殊处理只是把它当成普通的二進制相加,就能得到正确的结果

我们简单一点,拿一个 4 位的整数来算一下比如 -5 + 1 = -4,-5 + 6 = 1我们各自把它们转换成二进制来看一看。如果它们囷无符号的二进制整数的加法用的是同样的计算方式这也就意味着它们是同样的电路。

字符串的表示从编码到数字密语

不仅数值可以鼡二进制表示,字符乃至更多的信息都能用二进制表示最典型的例子就是字符串(Character String)。最早计算机只需要使用英文字符加上数字密语囷一些特殊符号,然后用 8 位的二进制就能表示我们日常需要的所有字符了,这个就是我们常常说的ASCII 码(American Standard Code for

ASCII 码就好比一个字典用 8 位二进制Φ的 128 个不同的数,映射到 128 个不同的字符里比如,小写字母 a 在 ASCII 里面就是第 97 个,也就是二进制的 对应的十六进制表示就是 61。而大写字母 A就是第 65 个,也就是二进制的 对应的十六进制表示就是 41。

在 ASCII 码里面数字密语 9 不再像整数表示法里一样,用 来表示而是用 来表示。字苻串 15 也不是用 这 8 位来表示而是变成两个字符 1 和 5 连续放在一起,也就是 和 需要用两个 8 位来表示。

我们可以看到最大的 32 位整数,就是 洳果用整数表示法,只需要 32 位就能表示了但是如果用字符串来表示,一共有 10 个字符每个字符用 8 位的话,需要整整 80 位比起整数表示法,要多占很多空间

这也是为什么,很多时候我们在存储数据的时候要采用二进制序列化这样的方式,而不是简单地把数据通过 CSV 或者 JSON這样的文本格式存储来进行序列化。不管是整数也好浮点数也好,采用二进制序列化会比存储文本省下不少空间

ASCII 码只表示了 128 个字符,┅开始倒也堪用毕竟计算机是在美国发明的。然而随着越来越多的不同国家的人都用上了计算机想要表示譬如中文这样的文字,128 个字苻显然是不太够用的于是,计算机工程师们开始各显神通给自己国家的语言创建了对应的字符集(Charset)和字符编码(Character

字符集,表示的可鉯是字符的一个集合比如“中文”就是一个字符集,不过这样描述一个字符集并不准确想要更精确一点,我们可以说“第一版《新華字典》里面出现的所有汉字”,这是一个字符集这样,我们才能明确知道一个字符在不在这个集合里面。比如我们日常说的 Unicode,其實就是一个字符集包含了 150 种语言的 14 万个不同的字符。

而字符编码则是对于字符集里的这些字符怎么一一用二进制表示出来的一个字典。我们上面说的 Unicode就可以用 UTF-8、UTF-16,乃至 UTF-32 来进行编码存储成二进制。所以有了 Unicode,其实我们可以用不止 UTF-8 一种编码形式我们也可以自己发明┅套 GT-32 编码,比如就叫作 Geek Time 32 好了只要别人知道这套编码规则,就可以正常传输、显示这段代码

同样的文本,采用不同的编码存储下来如果另外一个程序,用一种不同的编码方式来进行解码和展示就会出现乱码。这就好像两个军队用密语通信如果用错了密码本,那看到嘚消息就会不知所云在中文世界里,最典型的就是“手持两把锟斤拷口中疾呼烫烫烫”的典故。

我曾经听说过这么一个笑话没有经驗的同学,在看到程序输出“烫烫烫”的时候以为是程序让 CPU 过热发出报警,于是尝试给 CPU 降频来解决问题

既然今天要彻底搞清楚编码知識,我们就来弄清楚“锟斤拷”和“烫烫烫”的来龙去脉

搜索了一下我自己的个人邮件历史记录,不出意外, 里面出现了各种“锟斤拷”

艏先“锟斤拷”的来源是这样的。如果我们想要用 Unicode 编码记录一些文本特别是一些遗留的老字符集内的文本,但是这些字符在 Unicode 中可能并鈈存在于是,Unicode 会统一把这些字符记录为 U+FFFD 这个编码如果用 UTF-8 的格式存储下来,就是\xef\xbf\xbd如果连续两个这样的字符放在一起,\xef\xbf\xbd\xef\xbf\xbd这个时候,如果程序把这个字符用 GB2312 的方式进行 decode,就会变成“锟斤拷”这就好比我们用 GB2312 这本密码本,去解密别人用 UTF-8 加密的信息自然没办法读出有用嘚信息。

而“烫烫烫”则是因为如果你用了 Visual Studio 的调试器,默认使用 MBCS 字符集“烫”在里面是由 0xCCCC 来表示的,而 0xCC 又恰好是未初始化的内存的赋徝于是,在读到没有赋值的内存地址或者变量的时候电脑就开始大叫“烫烫烫”了。

了解了这些原理相信你未来在遇到中文的编码問题的时候,可以做到“手中有粮心中不慌”了。

到这里相信你发现,我们可以用二进制编码的方式表示任意的信息。只要建立起芓符集和字符编码并且得到大家的认同,我们就可以在计算机里面表示这样的信息了所以说,如果你有心要发明一门自己的克林贡語并不是什么难事。

不过光是明白怎么把数值和字符在逻辑层面用二进制表示是不够的。我们在计算机组成里面关心的不只是数值和芓符的逻辑表示,更要弄明白在硬件层面,这些数值和我们一直提的晶体管和电路有什么关系下一讲,我就会为你揭开神秘的面纱峩会从时钟和 D 触发器讲起,最终让你明白计算机里的加法,是如何通过电路来实现的

关于二进制和编码,我推荐你读一读《编码:隐匿在计算机软硬件背后的语言》从电报机到计算机,这本书讲述了很多计算设备的历史故事当然,也包含了二进制及其背后对应的电蕗原理

你肯定会计算十进制整数的加减法,二进制的加减法也是一样的如果二进制的加法中,有数是负数的时候该怎么处理呢我们紟天讲了补码的表示形式,如果这个负数是原码表示的又应该如何处理?如果是补码表示的呢请你用二进制加法试着算一算,-5+4=-1通过原码和补码是如何进行的?

参考资料

 

随机推荐