今天的第二更,被我拖到了傍晚,嘿嘿,二进制这方面让本就数学不好的我很头疼,所以研究了一段时间
在学习之前我们先了解几个问题:
32位是几个字节?
- 01011100对于十进制是多少?
- 00001111向左位移两位结果是多少?有什么规律?
- 以补码形式表示的8位二进制数11111111,十进制为多少?
- 二进制和十进制有什么区别?
在学习前肯定会对问题里的一些属于感到蒙蔽,不要急,按照我写的一步一步往下看,再回头看这些问题,就会迎刃而解
为什么要用二进制?
可能有些人不了解我们放着好好地十进制不用为什么要去用一跟零去表达,在上一章(小白的CTF学习之路1——程序与CPU)我们讲过,计算机是由各种集成电路(IC)组成的,而集成电路上面呢,他有银角,银角只能表达两种状态,一种是通电,一种是不通电,那么通电和不通电就用0和1来表示,0代表0负,1代表5负,(cpu内的晶体管与集成电路是一样的)
二进制是如何表达文字,图片,视频和声音的?
这里我们需要知道二进制都能表示些什么:
- 小数
- 字符
- 数值
- 图片
- 视频
- 音频
小数我们先不用管,字符我们可能比较好理解,我们只需将英文字母26个来乘2(大小写),再用52个编号来表达52个字符
那么图片我们是怎样做到的呢?视频呢?音频又是如何做到的呢?
不要急,我们一步一步来看
图片,我们可以举个例子,比如我们想表示A这个字母的图片,我们在一个5X5的格子上,将这个A的形状用黑点来把格子涂黑,而在二进制中呢,我们是一样的,在一个5X5的不通电电路中,用通电来表示图像,这就是我们的点阵法的形象理解,但是,这种方法只能显示黑或白,我们看的图片肯定不是黑白的啊,这怎么办呢?我们可以在此之上,再加上一个表,每个格里面代表一个颜色,这样,我们就很好的解决了颜色的问题,我们常说的8位色,32位色等就是这个意思(8位色可以表示6万多种颜色)
图片我们了解了,视频就相对简单了,视频比图片多了一个叫做轨道的东西,一帧一帧的播放图片
那么怎么表达音频呢?音频是通过采样形成高低波的点,将结果形成一个形式
这就是我们二进制能够表达的东西及原理
以下内容涉及到运算部分
一:二进制和十进制的转换
十进制:逢十进一
二进制:逢二进一
下面是0-5的二进制转换,下面以此类推
- 0;0
- 1;1
- 2;10
- 3;11
- 4;100
- 5;101
具体是怎么运算的呢?可以参考我下面的图片
二:进制的运算(难点)
十进制运算:加减乘除
二进制运算同样可以进行加减乘除
- 00111+01000=01111
- 0010011+0010011=0100110
注意逢二进一
二进制减法
二进制当中没有减,只能通过加法来实现
例如:十进制10-5=10+(-5)
二进制:1101-0011=1010
依然是逢二进一的逆运算,简单吧,但是计算机是如何做的呢?
1101+(-0011)
那么我们就出现了一个问题:二进制如何表示负数?
我们知道,计算机里有银角,每个银角存一个二进制的值,那么表示负数我们就规定一个长度(8位,16位,32位),拿它最前面的表示符号,0代表正,1代表负,这样一来,我们的首位代表标志位
我们现在表示了负数,但是我们依旧还是无法用于运算,因为计算机无法理解,这里我们便引入了一个补数的概念
例如:1=0001
补数:取反=1110
+1=1111
1111这个值就代表我们的-1
这里我们需要注意一下,我们需要事先规定好数值的范围,上面的例子的范围就是4,超过4位的计算机就会舍弃,我们的长度规定有:8位,16位,32位,64位
这样我们的补数就可以用于二进制减法运算了
二:二进制的乘或除
左移运算是代表乘法,例如:0001=1X4,左移两位,0100=4,0011=3X2,左移一位0110=6
由此得出结论:每左移几位=X几个2
右移运算代表除法
我们上面的左移运算是用0来补全
0100=4/2,右移一位,0010=2
这样运算ok没问题
但是如果是这种情况:
1000 0000=-128
右移二位
1110 0000=-32
当进行补码后的右移需要把首位跟着它一起右移过去
再举个栗子:
10011100=-100
右移二位
11100111=-25
这样一来,我们的二进制除法工作就已经完成了,右移分为两种,一个是逻辑右移:作为正整数的除,一个是算术右移:根据首位决定补0或1
有人会问,既然算术右移可以实现全部的运算,为什么还要进行逻辑右移呢?我们的逻辑右移可以用来表示整体右移,例如,单片机内的点阵跑马灯,用于动态视频等操作
除了逻辑右移,还有逻辑非,逻辑与,逻辑或,逻辑异或等比较容易的运算
逻辑非就是取反,逻辑与是10得0,11得1,逻辑或是10得1,逻辑异或是10=1,与我们高中学的数学知识差不多
未完待续...