小白的CTF学习之路2——二进制数据基础与运算(上)
今天的第二更,被我拖到了傍晚,嘿嘿,二进制这方面让本就数学不好的我很头疼,所以研究了一段时间
在学习之前我们先了解几个问题:
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,与我们高中学的数学知识差不多
未完待续...
小白的CTF学习之路2——二进制数据基础与运算(上)的更多相关文章
- 小白的CTF学习之路3——二进制数据基础与运算(下)
处理了二进制的整数运算,下面我们来进行令人绝望的浮点数运算 我们先来看一下float事列程序: #include<"stdio.sh"> int main() { fl ...
- 小白的CTF学习之路1——程序与CPU
刚刚注册了这个博客园,尽量保持每日一更(*/ω\*) 今天看了po学院的教学视频,了解了程序是什么,如何在CPU当中工作的等各种之前未曾想过的问题,特此记录,以防忘记 首先我们学习程序与CPU之前需要 ...
- 小白的CTF学习之路4——内存
明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...
- 小白的CTF学习之路8——节约内存的编程方式
今天第二更,废话不说上干货 上一章我们学习了内存和cpu间的互动方式,了解到内存的空间非常有限,所以这样就需要我们在编程的时候尽可能的节省内存空间,用最少的空间发挥最大的效果,以下是几种节约内存的方法 ...
- 小白的CTF学习之路7——内存与硬盘
前天去网吧跟朋友包宿,导致昨天一整天都报废,今天早上研究了一下nethunter导致手机成功变砖,感冒不停地咳嗽,这些理由应该足够我前两天拖更了吧,下面开始正题 磁盘学习路线 虚拟缓存 虚拟内存 节约 ...
- 小白的CTF学习之路6——阶段测评
刚才考了自己一次,下面我把题和答案放到下面 CPU中不含有以下选项中的 C A: 运算器 B: 寄存器 C: 内存 D: 时钟 这是一道送分题,CPU包含以下几种原 ...
- 小白的CTF学习之路5——内存的逻辑结构
很衰的一天,各种意料之外的问题,但都挡不住我每日一更的步伐 内存的逻辑结构大致分为以下几种: 数组 栈与队列 链表 二叉树 以上,数组,栈,链表是我这章要说明的 在学习前需要了解的两个问题: 1.内存 ...
- mybatis学习之路----批量更新数据两种方法效率对比
原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...
- 新手小白的Linux学习之路
大家好,我是一个零基础的新手小白,在此和大家分享一下新手小白的学习之路.欢迎各位大神指教!谢谢 Linux简介: Linux操作系统诞生于1991年10月,由芬兰赫尔辛基大学的在校生Linus Tor ...
随机推荐
- 利用飞儿云PHP框架自带的DNSPOD库做DDNS动态域名解析
取得FiradioPHP git clone https://github.com/firadio/firadiophp.git 保存到/config/dnspod1.php <?php ret ...
- 验证Textbox的字符长度
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { ) { //Indi ...
- redis排序
1.sort 排序最常见的是sort命令,可以对列表或者有序集合排序,最简单的排序方式如下: > lpush list (integer) > lpush list (integer) & ...
- node-gyp和node-pre-gyp笔记
node-gyp大家都不陌生,先不做赘述. node-pre-gyp,install命令可以将存在网络上的作者根据不同平台预编译好的二进制文件下载下来 因为项目需要,博主需要本地编译,而不是去网上下载 ...
- ORACLE中用户等系统信息操作
1.查看所有用户:select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统 ...
- How to solve “Dynamic Web Module 3.1 requires Java 1.7 or newer” in Eclipse
How to solve “Dynamic Web Module 3.1 requires Java 1.7 or newer” in Eclipse Last updated on June 20t ...
- oracle数据库中存储过程使用MD5算法加密
一.技术点 1. DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFU ...
- docker-compose学习
该实践是在已经安装了docker的基础上,如果还未安装docker,请先安装docker : https://www.cnblogs.com/theRhyme/p/9813019.html docke ...
- ubuntu系统中安装eclipse
具体可以看这篇博文 .https://www.cnblogs.com/sanduo1314/articles/5137090.html 然后再/usr/share/applications中找到ecl ...
- IP路由实验之---Telnet远程登陆
实验设备:一台华三路由器,一台PC 骤一,为路由器端口配置 IP 地址 <H3C>system-view #进入系统视图 [H3C] / #进入0/0端口 [H3C-Ethernet-/] ...