小白的CTF学习之路2——二进制数据基础与运算(上)

时间:2022-10-23 15:05:44

今天的第二更,被我拖到了傍晚,嘿嘿,二进制这方面让本就数学不好的我很头疼,所以研究了一段时间

在学习之前我们先了解几个问题:

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

具体是怎么运算的呢?可以参考我下面的图片

小白的CTF学习之路2——二进制数据基础与运算(上)

二:进制的运算(难点)

十进制运算:加减乘除

二进制运算同样可以进行加减乘除

  • 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——二进制数据基础与运算(上)的更多相关文章

  1. 小白的CTF学习之路3——二进制数据基础与运算(下)

    处理了二进制的整数运算,下面我们来进行令人绝望的浮点数运算 我们先来看一下float事列程序: #include<"stdio.sh"> int main() { fl ...

  2. 小白的CTF学习之路1——程序与CPU

    刚刚注册了这个博客园,尽量保持每日一更(*/ω\*) 今天看了po学院的教学视频,了解了程序是什么,如何在CPU当中工作的等各种之前未曾想过的问题,特此记录,以防忘记 首先我们学习程序与CPU之前需要 ...

  3. 小白的CTF学习之路4——内存

    明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...

  4. 小白的CTF学习之路8——节约内存的编程方式

    今天第二更,废话不说上干货 上一章我们学习了内存和cpu间的互动方式,了解到内存的空间非常有限,所以这样就需要我们在编程的时候尽可能的节省内存空间,用最少的空间发挥最大的效果,以下是几种节约内存的方法 ...

  5. 小白的CTF学习之路7——内存与硬盘

    前天去网吧跟朋友包宿,导致昨天一整天都报废,今天早上研究了一下nethunter导致手机成功变砖,感冒不停地咳嗽,这些理由应该足够我前两天拖更了吧,下面开始正题 磁盘学习路线 虚拟缓存 虚拟内存 节约 ...

  6. 小白的CTF学习之路6——阶段测评

    刚才考了自己一次,下面我把题和答案放到下面 CPU中不含有以下选项中的  C A:     运算器 B:      寄存器 C:     内存 D:     时钟 这是一道送分题,CPU包含以下几种原 ...

  7. 小白的CTF学习之路5——内存的逻辑结构

    很衰的一天,各种意料之外的问题,但都挡不住我每日一更的步伐 内存的逻辑结构大致分为以下几种: 数组 栈与队列 链表 二叉树 以上,数组,栈,链表是我这章要说明的 在学习前需要了解的两个问题: 1.内存 ...

  8. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  9. 新手小白的Linux学习之路

    大家好,我是一个零基础的新手小白,在此和大家分享一下新手小白的学习之路.欢迎各位大神指教!谢谢 Linux简介: Linux操作系统诞生于1991年10月,由芬兰赫尔辛基大学的在校生Linus Tor ...

随机推荐

  1. react-native 踩坑记

    最近在使用react-native的时候遇到了很多坑,这里给大家分享下 一.样式 react-native 虽然支持flex布局,但是所有的样式均是css样式的一个很小的集合,尤其是在安卓机下问题尤为 ...

  2. js转换 &sol;Date&lpar;1464671903000&rpar;&sol; 格式的日期的方法

    转换成:2016-07-11 function getFDate(date) { var d = eval('new ' + date.substr(1, date.length - 2)); var ...

  3. libSVM 简易使用手册

    关于SVM的基础理论知识,可以google这篇文章<SVM的八股简介>,讲解得生动有趣,是入门的极好教材.作为拿来主义者,我更关心怎么用SVM,因此瞄上了*林智仁教授提供的libSVM. ...

  4. poj 2536 GopherII(二分图匹配)

    Description The gopher family, having averted the canine threat, must face a new predator. The are n ...

  5. Kafka的coordinator

    (基于0.10版本) Group Management Protocol Kafka的coordiantor要做的事情就是group management,就是要对一个团队(或者叫组)的成员进行管理. ...

  6. scanf从文件中读入,printf写入到文件

    重定向方式读写文件 #include <stdio.h> #define LOCAL int main() { #ifdef LOCAL freopen("input.txt&q ...

  7. Problem 1108 - 淼&&num;183&semi;诺贝尔

    #include<iostream> #include<vector> #include<algorithm> using namespace std; struc ...

  8. C&num;分析URL参数获取参数和值得对应列表

    原文: C#分析URL参数获取参数和值得对应列表 /// <summary> /// 分析url链接,返回参数集合 /// </summary> /// <param n ...

  9. QTP11完美破解小笔记

    相比Loadrunner的破解,QTP的应该会更简单,但是效果并没有Loadrunner的长久.QTP的破解只能维持30天,每30天需要再进行如下操作: 1.到C:\ProgramData目录下面去删 ...

  10. js 检测浏览器

    首先还是IE浏览器的检测,一般我们在写代码的时候,出现的兼容性bug几乎都来自IE.从IE10以后,IE还算有点良心,支持了大部门的CSS3及H5的新特性.那么在IE10之前呢,就要才去别的手段来代替 ...