世界上分两种人,第1种是知道二进制的,第10种是不知道二进制的。
所谓进制,就是进位制度。
0 1 2 3 4 5 6 7 8 9,十个基本元素就是十进制
基本元素数量名称进位后0 1 2 3 4 5 6 7 8 910十进制11 12 13 14 15 16 17 18 190 1 2 3 4 5 6 78八进制10 11 12 13 14 15 16 170 1 2 34四进制10 11 12 130 12二进制10 11思考1: 所谓进制,不过如此,那么你知道十六进制的基本元素和第一次进位后的结果是怎样的嘛?
我们的学习重点也就是二进制——机器语言的本质。
首先介绍一个小技巧,为了用二进制表示十进制的数字,需要四个二进制位来才可以完全表示,这样的一种方式形成了不同的编码(雷格码、2421码、8421码,等等),其中有必要介绍一下8421码,又称作BCD码,介绍这个只是为了帮助大家更快的在大脑中转换数据!
二进制转换成十进制的方法很直白: 11010 = 1 ∗ 1 0 4 + 1 ∗ 1 0 3 + 0 ∗ 1 0 2 + 1 ∗ 1 0 1 + 0 ∗ 1 0 0 11010 = 1*10^4+1*10^3+0*10^2+1*10^1+0*10^0 11010=1∗104+1∗103+0∗102+1∗101+0∗100
( 11010 ) 2 = 1 ∗ 2 4 + 1 ∗ 2 3 + 0 ∗ 2 2 + 1 ∗ 2 1 + 0 ∗ 2 0 (11010)_2 =1*2^4+1*2^3+0*2^2+1*2^1+0*2^0 (11010)2=1∗24+1∗23+0∗22+1∗21+0∗20
如果脑子里也这样计算的话,啊这……但是如果按照8421码的位次来记住1111是8+4+2+1=15的话,记住1011是8+0+2+1=11的话,这样貌似可以少思考一些,从而降低因进制转换的脱发风险~(其实就是把每位二进制所对应的十进制数记住而已emmm……)
思考2:这是二进制到十进制的转换,那么十进制到二进制、十进制到十六进制、十进制与八进制、八进制与二进制、八进制与十六进制、二进制与十六进制的转换,大家自己去学习一下吧~
先说转换,1取反是0,0取反是1
方法举例反码正数:不变,负数:首位不变,其他按位取反0010 -> 0010 1010 -> 1101补码正数:不变,负数:反码加一0010 -> 0010 1010 -> 1110PS:首位是1代表负数,首位是0表示正数,这种表示方式称为原码
介绍补码与反码,对日后处理指令运算有重要作用。
现在以钟表举例,下表是个坏表,现在要把表从10点调整到2点,有两种途径,一个是逆时针转动10 - 2 = 8格,二是顺时针波动时针转动12 - 10 + 2 = 4格,同样的结果,如果换一种表达,即: 10 点 − 8 格 = 2 点 10点 - 8格 = 2点 10点−8格=2点
10 点 + 4 格 − 12 点 = 2 点 10点+4格-12点=2点 10点+4格−12点=2点
道理很简单,钟表可以看成十二进制,令A = 11,B = 12,钟表的进制元素就是0 1 2 3 4 5 6 7 8 9 A B
那么2点就有两个意思,真正的2点,和真正的14点,14点用是二进制表示就是**12点(细品)**,表中只有12个刻度,没办法表示14点,这样就减去进位12(首位的1),这样就是最后的2点。
所以这里的4就是-8的补码(十二进制),因为一个数减8和加4的效果一样,这就是补码的意义。
这样说显得有些啰嗦,区区一个二进制本不该如此冗余,但也不知道怎么说,那就这样吧~
在二进制的世界中,一般数字的位数是固定的,就像人的手指数量固定一样。
假设1:二进制只有5位,首位要表示符号。
假设2:二进制的世界中只有加法,以及反码的运算,没有其他的运算方式,那么如何实现减法呢?
以7+5、7-5、-7+5、-7-5这四个计算为例: 7 + 5 = 00111 + 00101 = 01100 7+5=00111+00101=01100 7+5=00111+00101=01100
− 5 的 反 码 = 11010 , − 5 的 补 码 = 11010 + 1 = 11011 -5的反码=11010,-5的补码=11010+1=11011 −5的反码=11010,−5的补码=11010+1=11011
7 − 5 = 00111 + 11011 ( − 5 的 补 码 ) = 00010 ( 本 该 是 100010 , 但 是 只 有 5 位 , 所 以 舍 弃 第 一 位 ) 7-5=00111+11011(-5的补码)=00010(本该是100010,但是只有5位,所以舍弃第一位) 7−5=00111+11011(−5的补码)=00010(本该是100010,但是只有5位,所以舍弃第一位)
练习1:剩下的两个运算交给大家啦~
