二进制

二进制,顾名思义,就是逢二进一的数字系统。逢二进一,也就是说,只会出现0和1两种数字。这应该是最简单的数字系统了吧。你也许听别人提过,电脑那家伙笨的很,只知道0和1。哈哈,现在的绝大多数计算机的确是基于二进制运行的。说到这,你不是不很自豪呢?我比计算机可要知道的太多了,现在,就让我们走进2的世界吧。
《道德经》有云:道生一,一生二,二生三,三生万物。现在看来功能强大无比的计算机,竟是建立在一串串不起眼的0、1上,让人不得不相信纷繁复杂的世界背后,一定蕴藏着一条简洁到极致的真理。
这时候聪明的你肯定会犯嘀咕了,既然计算机只认识0和1,那负数怎么表示呢?是吧,没有“-”号,怎么表示负数呢?当然也是用0或1来表示了。
这里说两个新概念,比特(bit)和字节(byte)。计算机中,一位数字称为1个比特,8位数字称为1个字节。为什么要引入字节的概念呢?这是因为1个比特只能表示两种不同的事物,而1个字节有8个比特,可以表示2^8(256)种不同的事物。那为什么一个字节是8个比特而不是9个、10个呢?实际上,字节这个概念最早是IBM提出来的,而IBM使用字节的一个原因则是它们易于以BCD这种格式保存(参见《编码的奥秘》)。
既然采用一个字节进行运算,那我们完全可以约定,这8个比特的其中一位,用来标识正负。而其中的一种约定就是,最高位的比特用来标识正负号,0代表正数,1代表负数。
好了,现在能表示正负数了。既然数都可以表示了,那就该做运算了。
现在,我们实现一个8位加法机,实现7位的加减法。1个字节能表示的数的范围是-128~127。

一. 先来做加法运算吧:

  • 一:
    0000 0001
    0000 0011
    ---------·
    0000 0100
    这个很简单,一瞅就能2看出来结果是“0000 0100”。


  • 0100 0000
    0100 0000
    ---------·
    1000 0000
    咦,不对呀。两个正数相加,结果怎么是个负数?


  • 1010 0001
    1100 0010
    ---------·
    0110 0011
    这下两个负数相加,结果怎么是正数了?
    这就是溢出的问题了。两个正数相加得到负数,称为正溢出。两个负数相加得到正数,称为负溢出。

加法还简单,减法怎么做呢?
减法就是加上一个负数。前面说了,负数就是最高位为1的数。实际上,负数在计算机内部是采用2的补码形式存储的。2的补码是什么呢?它的转换步骤如下:
比如2的2进制是 0000 0010。现在看如何存储-2

  1. 逐位取反。
    0000 0010 --> 1111 1101
  2. 加1
    1111 1101
    0000 0001
    ---------·
    1111 1110

所以,-2在计算机中存储的是1111 1110,而不是1000 0010。
为什么采用2的补码呢?
先看我们最习惯的10进制看吧,24 - 16 = 8,这是两位数的减法,两位数中,最大的数是99,那么,用99减去被减数肯定就不需要借位了是吧,于是24 - 16 = 8 --> 24+(99-16) + 1 - 100 = 8。

  • 接下来我们看下 4 - 2:
    4是0000 0100,-2是1111 1110
    0000 0100
    1111 1110
    ---------·
    0000 0010
    这里生了什么呢?
    0000 0100 + (1111 1111 - 0000 0010) + 1 - 1 0000 0000。是不是跟10进制里面的一样?取反就是拿8位数里最大的那个数-->1111 1111减去当前数。最后要减去1 0000 0000,因为我们只有8位,这里溢出的1就自动舍弃了。
  • 那如果是2 - 4呢?
    2是0000 0010,-4呢?0000 0100-->1111 1011-->1111 1100
    0000 0010
    1111 1100
    ---------·
    1111 1110
    1111 1110是多少呢?我们以前说过是-2。结果也是对的。
  • -2-2呢?
    1111 1110
    1111 1110
    ---------·
    1111 1100
    结果也是对的。都是一个道理。

好了,现在我们有1个字节,可以表示256种不同的事物,我们可以给符号以及字母编码来表示文本,这就是ASCII码了。
最后,提一下16进制。为什么提16进制呢?因为2^4=16。4个比特的数字对应一个16进制的数字,一个字节就可以用两个16进制数字来表示,这样读起来比8个01数字串简单多了。下面是二进制、十进制、十六进制对照表:

二进制 十进制 十六进制 二进制 十进制 十六进制
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 10 A
0011 3 3 1011 11 B
0100 4 4 1100 12 C
0101 5 5 1101 13 D
0110 6 6 1110 14 E
0111 7 7 1111 15 F
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

  • 关于二进制 息。这种数制叫做二进制。现在在使用的计算机基本上都是二进制进行运算的。那么二进制有什么好处了? (1)...
    BigBigArvin阅读 920评论 0 0
  • 计算机科学关注的是计算而不是计算机。--by Richard Hamming 二进制补码是在《计算机科学概论》中讲...
    Bintou老师阅读 647评论 0 2
  • 二进制转十进制 0011 10012^(6-1) + 2^(5-1) + 2^(4-1) + 2^(1-1) = ...
    u14e阅读 1,278评论 0 1
  • -5 如何用二进制表示 取反加15 ---- 0000 0101取反1111 1010加11111 1011...
    Jokerone_阅读 1,840评论 0 0
  • IC是集成电路的简称,集成引脚电路只有0和5V 使用二进制可以更好的控制电脑里面的电路 位:位(bit,缩写为b)...
    无力吐槽果阅读 1,470评论 0 0