本章描述我们如何从10进制的认知模式变成在2进制、16进制任意切换的模式,顺便介绍下补码等不常用的进制知识。

几种进制介绍

  • 十进制
    太简单了,不说了

  • 二进制
    有人说二进制就是0101这种只有0和1的东西,但是要完全讲清楚还是要做一系列对比的,比如十进制我们从0数到9十个数,再往后就要进位了,从一位数变成两位数10,1是高位,代表1个10,再加上0是十,所以这种十个数进一位,一个高位代表10的叫做十进制,我们平时都太习惯了,所以都没意识到这些东西。同样的道理,二进制就是两个数0、1就要进位,而10的高位1只代表2,加上低位0也只表示二的这种进制,就叫做二进制。我这样讲你懂了吗?0101b表示5。
    为什么要有二进制呢?因为我们技术不行,做出来的硅晶体只能表达出0和1两种状态,如果有一天我们技术牛了,一个元件可以表示出稳定的十六种状态,那我们的电路要换代了,变成十六进制的了->_->(事实上,SSD行业正在经历这一变化)

  • 十六进制
    我个人喜欢举一反三,那16进制啥意思你能自己推出来不?不会?看看上面一段,0到。。呃9往后怎么表示,10 11吗?这样就变成两位数了,不行,那我们用A B C D表示吧,那就是0到E一共16个数才进位,高位1表示16个的进制。0x11或者11h表示17。
    为什么有十六进制啊?因为我们觉得二进制太长了,写代码也好,写文章也好很不方便,比如二进制11010100010101011101010100011011用十六进制表示才0xD455D51B这么短,神奇不?

  • 八进制
    同上,就说下写法是后面带个o,比如11o表示9

进制的转换

进制的转换一般就是十进制转某个进制或者某个进制转十进制,很少非十进制之间互转的。二进制转换的诀窍如下:
1111 对应的每位1分别代表十进制的 8 4 2 1,记住这四个数字二进制随便转,比如1011 是 8 + 2 + 1 = 11

十六进制在转换上没什么诀窍,唯一需要训练熟练的就是随便给出A~E中的一个字母,你能瞬间反应出来它是几:
A-10 B-11 C-12 D-13 E-14 F-15,至于数字的转换,因为十六进制比较大,我也做不到口算,比如0xfeac是多少,我口算是算不出来的,不过,我有个任何教科书都不会讲的终极大绝招,那就是:

digit_course_decimal_calc

他就是我们windows自带的计算器,在开始菜单输入计算器调出,点击查看-程序员,就可以切换到这个模式,选择左边的进制按钮,输入你要转换的数字,然后点击切到另一个进制,计算器会帮你完成计算,有了它你就可以无往不胜,所向披靡。

什么?你说这种不用笔算的是没有灵魂的?快忘了你考试的那一套吧,现在写个代码谁还没有电脑来着。

其他不常用知识

不常用就是说不常用,就是说你不看也可以,用到了临时Google就行,比如:补码、反码、补码运算,它们是为了在设计CPU的时候简化电路的目的设计的,你不涉及这么底层可能永远都遇不到。

那补码和反码是什么呢?

我都说不常用了你还指望我讲?其实我也不会!


那接下来,我们抓紧进入下一节:《数字电路基础(3)——逻辑运算》,你得知道1+1等于几?