精华内容
下载资源
问答
  • 二进制用途

    千次阅读 2020-12-28 19:30:21
    熟悉二进制有以下几个用途: 更容易理解计算机的数据存储方式 计算机内部的很多转换,例如数据类型之间的强转,都可以用二进制解释最终的结果的值 二进制的运算速度高 二进制的运算速度比十进制高的多。例如求 2 的...

    二进制是计算机内部数据表示的形式,所以学习计算机编程必须熟悉二进制。熟悉二进制有以下几个用途:

    1. 更容易理解计算机的数据存储方式
      计算机内部的很多转换,例如数据类型之间的强转,都可以用二进制解释最终的结果的值
    2. 二进制的运算速度高
      二进制的运算速度比十进制高的多。例如求 2 的 n 次方,通过移位实现的效率比数学方法高效。

    以二进制的形式存储数值,优点就是比较节约资源,可以使用二进制的位来存储信息,例如常见的硬件控制信息,都是二进制的形式进行提供的。

    展开全文
  • 二进制的妙用——通过二进制解决权限控制 前言 不知道小伙伴在学习Liunx的时候没有见过如下的命令: chmod 755 file.txt 这个命令的含义特别简单就是,这个文件按不同人原赋予对应的权限,7是指给创建人读写执行...

    二进制的妙用——通过二进制解决权限控制

    前言

    不知道小伙伴在学习Liunx的时候有没有见过如下的命令:

    chmod 755 file.txt
    

    这个命令的含义特别简单就是,这个文件按不同人原赋予对应的权限,7是指给创建人读写执行权限,第一个5是给创建人同组的人读和执行权限,第二个5是给其他用户读和执行权限。下面会给出一个数字的控制方式

    原理

    通过图片去解释是我很喜欢的方式,之后我会基于这个给出一个java实现权限控制的实现demo,里面涉及了大量的位运算,小伙伴们可以先自行学习原理。

    • 图示

    1. 总操作图
      在这里插入图片描述
    2. 权限判断图
      在这里插入图片描述

    解释:每个用户都可以向某一文件发出执行,三者任意操作,但是在发出之后,需要通过文件设置权限控制才可以。例如图示二来说,read请求是用户发出的,只有匹配到文件权限的read之后,操作才能算为成功。

    • 权限判断原理(二进制)

    我们设置以下规定: 1代表可执行,2代表可写入,4代表可读取
    他们对应的二进制为:001010100,这样我们就可以进行随意组合出111全部权限、110可写可读、011可写可执行权限等等权限。后每次用户发出的请求和文件设置的权限组进行比对,成功之后就可以执行操作
    在这里插入图片描述

    尾声

    本篇主要通过图的方式去解释Linux实现权限控制的方式,进而让大家明白二进制的用途之一。
    作者本想在之后加上java的代码实现,但是限于知识点和篇幅长度,就不再扩展,后续代码或一另一个博客的形式发出,并会链接到下面。

    展开全文
  • 二进制究竟什么用? 原码 反码 补码 7种位运算 当然了,位运算还有很多奇技淫巧,如果大家还想看进阶篇,记得给我点赞或者留言告诉我哦~ 二进制的作用 在实际生产中,二进制是用来优化时间和空间的。 二进制...

    本篇终于讲到了齐姐文章里常常出现的分割线!

    计算机说到底就是 0 和 1,所有的数在内存中都是以二进制的形式储存的。

    而位操作,或者说位运算,就是直接对内存中的二进制位进行操作。

    位运算可以说是我们的基本功,今天这篇文章就从以下角度和大家一起玩转位运算。

    1. 二进制究竟有什么用?
    2. 原码 反码 补码
    3. 7 种位运算

    当然了,位运算还有很多奇技淫巧,如果大家还想看进阶篇,记得给我点赞或者留言告诉我哦~

    二进制的作用

    在实际生产中,二进制是用来优化时间和空间的。

    二进制的运算,可能并不会降低复杂度的等级,但是可以把复杂度前面的系数降下来。

    举个例子。

    大家都知道堆,或者叫优先队列,一般来说是用完全二叉树来实现的,叫做二叉堆

    最小堆

    最小堆

    二叉堆插入、删除元素的时间复杂度都是 O(logn),如果这个不清楚的同学赶紧在公众号内回复「」复习一下,或者点击这里

    但是有另一种堆,它能够做到 O(1) 的时间插入元素,O(logn) 的时间删除元素,我在堆这篇文章里也提到过,就是斐波那契堆

    但为什么不用呢?

    就是因为 O(1) 前面的系数非常大。

    我们说 O(logn) 比 O(1) 好,是有个条件的,那就是 n 非常非常大的情况下,但是实际上,如果 n 是在 int 范围内,那么取个 log 也不过就是 32 了,反而这个 O(1) 的时间复杂度可能系数达到几百几千。

    一般来说实际应用中时间的测量并不是时间复杂度这么简单,有的时候就需要你把两个算法都实现出来,去跑去测量它的时间,才能决定哪个好。

    那么二进制一次能够作用于 32 位上(假设是一个 int),如果数据表示的巧妙,这完全可以优化 32 倍,多用几个 int 就多优化了好几个 32 倍,不香吗?

    除了优化时间,还可以优化空间。

    比如在网站发布新版本时,一般都会附上支持该版本的浏览器列表,不然有些老掉牙的浏览器看不到我的新功能还算我的锅么?

    那么怎么有效的表示这个浏览器列表呢?

    全世界所有浏览器都有个国际标准编号,这里我就简单假设一下:

    • 0 表示 QQ 浏览器
    • 1 表示 Chrome 浏览器
    • 2 表示火狐浏览器
    • 3 表示 ...

    那么我们就可以用一个 int 表示是否支持 32 个浏览器的状态,如果这个浏览器能用,那么这一位上就设为 1,那么比如国内的某个网站可以表示为:

    • 0b .... 1101

    所以位操作在很多代码里都很常用,比如网络协议、操作系统等等。

    接下来我们说说具体的知识点。

    原码 反码 补码

    数字有正有负,Java 中用的是 signed type,就是有正有负的。

    虽然在 Java 8 之后,也用了个工具来实现 unsigned type,但是其实底层实现是没有的。

    二进制最左边的一位是符号位,

    • 0 表示这个数是非负数;
    • 1 表示这个数是负数。

    对了,最左边的一位英文叫做 most significant bit,好多同学面试说的五花八门。。。

    正数

    正数的原码反码补码相同,没啥好说的。

    比如:

    • int 1 = 0b 0000 0000 0000 0001
    • int 2 = 0b 0000 0000 0000 0010

    负数:

    原码:把相应的正数的符号位设为 1。

    • -1 的原码 = 0b 1000 0000 0000 0001
    • -2 的原码 = 0b 1000 0000 0000 0010

    反码 ones' complement:符号位是 1,其余位取反。

    • -1 的反码 = 0b 1111 1111 1111 1110
    • -2 的反码 = 0b 1111 1111 1111 1101

    补码 two's complement :反码 + 1。

    • -1 的补码 = 0b 1111 1111 1111 1111
    • -2 的补码 = 0b 1111 1111 1111 1110

    而计算机中真正用来存储数据的是用补码

    这里稍微注意下反码和补码的英文,ones' 的这个 ' 在后面,two's 的这个 ' 在中间。。

    为什么计算机要用补码来存储数据呢?

    可能有同学会说正零负零的原因,但这只是表面现象。

    实际上通过补码这样精巧的设计,计算机做加减乘除运算就不用考虑符号,就可以让硬件里 CPU 的设计变得异常简单。

    最初计算机只有加法器没有减法器,所以它用这么一种方式用加法完成了减法。

    int 的最大值是多少?

    正是因为最左边一位是符号位,所以正数的表示就少了一位能用的,那么 int 的最大值就是:

    0111111...11 (31 ones) = 2^31 - 1 = 2147483647

    7 种位运算

    运算符

    中文

    英文

    运算规则

    <<

    左移

    left shift

    右边补充 0

    >>

    右移

    signed right shift

    左边补充符号位

    >>>

    无符号右移

    unsighed right shift

    Java 特有,左边补充 0

    ~

    位非

    NOT

    每位取反

    &

    位与

    bitwise AND

    每位做与操作,都是 1 则为 1,否则为 0

    I

    位或

    OR

    每一位做或操作,有 1 则为 1,否则为 0

    ^

    异或

    XOR

    相同为 0,不同为 1

    要注意的是前 4 个运算符是对 1 个数进行操作的,且操作完成后这个数本身的值不变;后 3 个操作是两个数的运算。

    我们一一来看。

    为了书写方便,下面的数值虽然是 int 类型,但我只写 8 位,大家都能理解的噢!

    1. <<

    左移操作就是把这些零啊壹啊的整体往左移动 n 位,右边缺的就补充 0。

    • 1 = 0b 0000 0001
    • 1 << 1 = 0b 0000 0010 = 2
    • 2 = 0b 0000 0010
    • 2 << 1 = 0b 0000 0100 = 4
    • 3 = 0b 0000 0011
    • 3 << 1 = 0b 0000 0110 = 6

    诶,大家发现没有,左移 1 位之后这个数相当于乘 2

    但是这只适用于左边溢出的高位中不包含 1 时。

    如果把 1 扔了,那就肯定不是 2 倍了嘛。

    2. >>

    • 1 = 0b 0000 0001
    • 1 >> 1 = 0b 0000 0000 = 0
    • 2 = 0b 0000 0010
    • 2 >> 1 = 0b 0000 0001 = 1
    • 3 = 0b 0000 0011
    • 3 >> 1 = 0b 0000 0001 = 1

    同理,右移操作的效果是这个数除以 2

    如果是负数呢?

    • -3 = 1111 1101
    • -3 >> 1 = 1111 1110 = -2

    因为 Java 是向零取整,所以奇数时会有问题,就不再是除以 2 的结果。

    总结一下,

    • 对于非负数、负数且是偶数,右移一位与除以 2 结果一样;
    • 对于负数且是奇数,右移一位不等于除以 2。

    3. >>>

    和 >> 的不同之处在于,这个的左边不论正负,一律补充 0。

    所以对于正数来说,和 >> 的效果一样,但是负数不同。

    • -3 = 1111 1101
    • -3 >> 1 = 01111 1110 = 很大的数。。

    4. ~

    取反操作,就是每一位取反,1 变成 0,0 变成 1。

    • 3 = 0b 0000 0011
    • ~3 = 0b 1111 1100

    5. &

    这个符号其实和逻辑与运算 && 意思一样,只不过作用在每一位上。

    对于每一位来说,两个数都是真,则为真,否则为假。

    • 3 = 0b 0000 0011
    • 5 = 0b 0000 0101
    • 3&5 = 0b 0000 0001

    6. |

    同理,和逻辑或运算 || 意思一样,只不过作用在每一位上。

    对于每一位来说,但凡有个真的就是真,否则为假。

    • 3 = 0b 0000 0011
    • 5 = 0b 0000 0101
    • 3|5 = 0b 0000 0111

    7. ^

    最后一个异或操作,相同为 0,不同为 1。

    • 3 = 0b 0000 0011
    • 5 = 0b 0000 0101
    • 3^5 = 0b 0000 0110

    对了,本周末新建了国内读者交流群,想加入的小伙伴后台回复「进群」拉你进群呀~

    另外 8 月自习室活动最后一周了,给我们自习室的小伙伴打起,应该有不少小伙伴能拿到齐姐的红包了,还没学够 21 天的要继续加油呀!

    9 月的自习室正在筹备中,如果你想参加,告诉我 9 月你想学习的天数和每天学习的时长,我们一起学习抱富!~

    展开全文
  • 二进制图文详解

    2017-09-11 14:18:47
    二进制图文详解 二进制Binary 2进制 逢二进一的计数规则。 在计算机内部,一切数据都是2进制的!! 2进制的数字 补码 补码本质是一种解决负数问题的算法。 1. 将数据的一半当做负数使用。 2. 补码在内存中是2...
  • 二进制的妙用

    2021-01-17 14:46:54
    因为二进制每一位只有0和1两种情况,所以二进制每一位可以对应某个元素是否在这个集合中。整个二进制数就构成了一个集合,对应二进制位为1的元素就在集合中,为0的就不在集合中。 表示对一个集合的每一个元素是否...
    1. 表示某个元素是否在集合中
      因为二进制每一位只有0和1两种情况,所以二进制每一位可以对应某个元素是否在这个集合中。整个二进制数就构成了一个集合,对应二进制位为1的元素就在集合中,为0的就不在集合中。
    2. 表示对一个集合的每一个元素是否进行某种操作
      整个二进制数表示对一个集合整体进行的某种操作,对应二进制位为1的元素表示对该元素进行了某种操作,为0的表示没有对该元素进行某种操作。

    利用二进制与整数一一对应的性质,就可以利用循环,把原本指数型的枚举变成线性。

    展开全文
  • 通过Linux脚本命令实现二进制文件拆分,便于分析各种用途二进制文件制作和分析,脚本简单,易于理解,使用灵活,可以提高工作效率
  • PRBS 基于 3 到 9 位内存延迟并输出 2^3 -1 到 2^9 -1 二进制序列长度。 用途:这些发生器可用于过程识别作为命令信号的噪声源。
  • wkb_to_abstract()将WKB转换为非常类似于二进制格式的抽象表示形式(用于调试和用途) 匀称库已用于测试,但此库不是必需的。 from wkb_to_geojson import wkb_to_geojson from wkb_to_wkt import wkb_to_wkt ...
  • 二进制、八进制、十六进制是很多实际意义的,人们生活中都用十进制,不要误以为只有十进制才现实意义,每个进制的出现都伟大的历史意义。 二进制 二进制的出现是创历史性的,在古代就两仪生四象,四象生...
  • 学习二进制

    千次阅读 2019-06-26 11:24:00
    什么是二进制 计算机是由逻辑电路组成的, 计算机底层通信就是通过电信号传递的,逻辑电路通常只有两个状态接通和断开, 这两种状态证号...我们常见的有二进制,十进制, 八进制,十六进制,这些进制之前是可以相互...
  • 名称“cstruct”源自其最初使用从套接字接口读取二进制数据的用途,该接口的格式基于 C 结构。 cstruct 将接收到的字节重新转换为 MATLAB 数据类型(包括简单类型和聚合类型 - 结构体和单元格)。 该映射基于模板...
  • 时间兜兜转转,终于又来到了乐博小课堂的时间,在讲今天要讲的内容之前,乐博客先给大家讲一个笑话:“世界上只有10种人,一种懂二进制,另一种不懂二进制。”这个笑话展示的就是我们这次要将给大家的内容——二进制...
  • 二进制详解

    千次阅读 2018-10-28 22:26:08
    二进制用途: 集成电路:电脑两种电压,分别是0v和5v,代表0和1 二进制可以表示: 小数 字符 视频 图片 数值 音频 字符:对每个英文字母进行编号 图片:将图片分成一个个小点,对小点进行编号让其组成图形,小点...
  • 在计算机安全与黑客攻防领域,CTF挑战经常以竞赛形式进行,目标是分析并利用指定的二进制文件,或者正在运行的进程/服务器,直至拿到隐藏在二进制文件中的“flag”为止。flag一般是十六进制的字符串,你可以用它来...
  • 目录 一.十进制和二进制区别 1、基数不同 2、有效字符不同 3、用途不同 二.十进制转二进制 ...二进制有效字符2个:0,1 3、用途不同 计算机只能用二进制存储和运算,在设计程序时二进制不容易读,所以
  • Java二进制操作

    2019-03-25 18:31:35
    一个以1开头的二进制数移位后还将以1开头,一个以0开头的二进制树移位后还将以0开头。所以 要小心 :Java是可以在整数中进行位运算的。 你可以使用叫作“无符号右移”运算符的第三个操作符:>>> 来实现以“0”...
  • 二进制文件和 ASCII

    千次阅读 2019-03-20 09:59:44
    计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件) 文本文件是可以看到的字符,二进制文件是不可视字符,如图片. 二进制文件: 包含在ASCII及扩展 ASCII字符中编写的数据或程序指令的文件。计算机文件...
  • 如何设计二进制文件格式

    千次阅读 2020-03-06 16:53:10
    设计二进制文件格式前言1、为何需要一种二进制的文件格式2、文件格式的具体设计(1)整体的文件结构(2)文件头魔数(magic number)(3)检验码(4)版本号(5)字节顺序(6)字节对齐(7)回写和流写 前言 本文是...
  • 杂项文件和二进制文件 用于图像,视频和其他杂项二进制文件的混合用途存储库。
  • 该项目是关于挖掘二进制漏洞的一些技术和技巧,可以理解为它是一个教材,里面包含了一些常见漏洞的原理和攻击方式。 由于本人水平有限,不能避免可能会在文档中出现错误,敬请原谅。 注意: 该项目版权尽属于我个人...
  • 二进制多少个1?

    2017-08-08 20:59:40
    题目计算在一个 32 位的整数的二进制表示中多少个 1.您在真实的面试中是否遇到过这个题? Yes 样例 给定 32 (100000),返回 1给定 5 (101),返回 2给定 1023 (111111111),返回 10Java代码常规实现 根据十进制...
  • Kubernetes二进制部署集群-最详细版本

    千次阅读 2020-06-22 10:18:48
    小结: 生产环境中部署Kubernetes集群,只有Kubeadm和二进制包可选,Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。我们这里使用二进制包部署Kubernetes集群,我也是推荐大家使用这种方式,虽然手动...
  • 二进制信号量

    2020-09-09 17:33:39
    目录 1.creat 2.delete ...允许线程访问的一个资源,使用二进制信号量作为互斥手段,初始值为 TRUE; 线程或中断通知另一个线程某件事件发生,初始值为 FALSE。 SylixOS 提供函数Lw_Semaph...
  • java二进制运算符

    2020-05-17 00:12:13
    一、二进制 二进制(binary)在数学和数字电路中指以2为基数的记数系统 计算机的二进制中用 0表示正数 1表示负数 十六进制:一个前缀0X或0x 八进制:前缀是0,最好不用,容易混淆 二进制:前缀是0b或0B 二进制...
  • JAVA二进制详解

    千次阅读 2017-07-18 20:00:01
    1、什么是二进制? 计算机内存中只有二进制,任何数据都需要转换为2进制才能计算处理2、十进制 逢十进一,99进位连续进两位,以此类推 数字: 0 1 2 3 4 5 6 7 8 9 权:10000 1000 100 10 1 基数:10 权...
  • 玩转前端二进制

    2020-07-08 17:00:00
    本文阿宝哥将按照以下的流程来介绍前端如何进行图片处理,然后穿插介绍二进制、Blob、Blob URL、Base64、Data URL、ArrayBuffer、TypedArray、Dat...
  • 二进制 1 2 4 8 16 32 64 128 512 1024 2048 概念:二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二,相当于十进制的计算 表示: 小数表示例子: php中二...
  • 这是用matlab编写的二进制遗传算法程序你可以在其中改写一下变成自己的程序用于自己的用途
  • 之前写了一篇关于win平台下...当然,这段代码也其他用途,故而了shell code的昵称,参考百度百科: https://baike.baidu.com/item/shellcode/4051847?fr=aladdin 思考: 我们需要解决以下问题 二进制代码从哪里来
  • 二进制和ASCII文件的区别 觉得有用的话,欢迎一起讨论相互学习~Follow Me 版权声明:本文为CSDN博主「迂者-贺利坚」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,431
精华内容 45,372
关键字:

二进制有哪些用途