精华内容
下载资源
问答
  • 汇编语言(英语:Assembly language)是一种用于电子计算机、微处理器、单片机或其他可编程器件的低级语言,在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种...这一过程被称为汇编过程。
  • 8位二进制乘法采用移位相加的方法。即用乘数的各位数码,从低位开始依次与乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加...
  • 什么要用到二进制

    千次阅读 2020-04-01 23:25:12
    什么要用到二进制? 数字电路非常广泛,小到逻辑门电路,大到超大规模集成电路,手机,电脑,智能设备……数字信号即可以表示数字,也可以表示非数值的信息,如文字,声音,图片,视频。如何将这些非数值类的信息...

    进制及其转换

    • 为什么要用到二进制?

    数字电路非常广泛,小到逻辑门电路,大到超大规模集成电路,手机,电脑,智能设备……数字信号即可以表示数字,也可以表示非数值的信息,如文字,声音,图片,视频。如何将这些非数值类的信息 变成 二进制信号呢?这就涉及到编码制度,即将信息通过编码的方式转成二进制值,如 MP3、MP4、midi、jpg、gif 等等

    1. 从可行性来说,采用二进制,只有 0 和 1 两个状态,能够表示 0 和 1 两种状态的电子器件有很多,比如开关的接通和断开、晶体管的导通和截止、磁原件的正负剩磁、电位电平的高低等都可以表示 0 和 1 两个数。使用二进制,电子器件具有实现的可行性。

    2. 从运算的简易性来说,二进制的运算法则少,运算简单,使计算机运算器的硬件结构大大简化(十进制乘法九九口诀有 55 条公式,而二进制乘法只有四条规则)。

    3. 从逻辑上讲,由于二进制 0 和 1 正好和逻辑代码假和真相对应,有逻辑代数的理论基础,用二进制表示二值逻辑很自然。 -摘自计算机为什么是二进制?

    • 十进制是“十进”,采用的是“个/十/百/千/万…”的进位递增
    • 二进制是“二进”,采用的是“1/2/4/8/16/…”的进位递增

    基数和位权

    在十进制系统中(基数 10),数4327.13表示 ( 4 × 1 0 3 ) + ( 3 × 1 0 2 ) + ( 2 × 1 0 1 ) + ( 7 × 1 0 0 ) + ( 1 × 1 0 − 1 ) + ( 3 × 1 0 − 2 ) (4×10^3) + (3×10^2) + (2×10^1) + (7×10^0) + (1×10^{-1}) + (3×10^{-2}) (4×103)+(3×102)+(2×101)+(7×100)+(1×101)+(3×102) ,其中的 10 就是我们所说的基数,基数在不同数制转换中起着重要作用。我们用数字我们知道多位数有很多位,有十位、百位和千位,处在每个位上的单位1表示的数值大小不同,十位上的数字1代表 10 ,百位上的数字 1 代表 100,以此类推,故我们称 1 0 n 10^n 10n为位权 ,也称比重 (以 10 进制为例)

    常见的进制

    计算机中的任何数据都可以用一串 0 或 1 来表示,但考虑到二进制数位太长,所以我们也可以采用八进制和十六进制来表示数值数据。为了避免出现误会,在给出一个数的同时就必须指明这个数的数制,例如:(1010)2、(1010)8、(1010)10、(1010)16所代表的数值就不同。除了用下标来表示不同的数制以外,在计算机中还常用后缀字母来表示不同的数制。后缀 B 表示这个数是二进制数(Binary);后缀 Q 表示这个数是八进制数(Octal),本来八进制数的英文单词的第一个字母应当是 O,因为字符 O 与数字 0 太容易混淆,所以常使用字符 Q 作为八进制数的后缀;后缀 H 表示这个数是十六进制数(Hexadecimal);而后缀 D 表示这个数是十进制数(Decimal)。十进制数在书写时后缀 D 可以省略,其他进制在书写时后缀一般不可省略。例如:有 4 个数分别为 375D、101B、76Q、A17H,从后缀字母就可以知道它们分别是十进制数、二进制数、八进制数和十六进制数。

    程序员们更喜欢采用程序设计语言的记号来表示不同进制的数,这就是前缀表示法,例如:在 C 语言中,八进制常数以前缀 0 开始,十六进制常数以前缀 0x 开始。

    • 十进制

      特点:有 10 个基数:0、1、2、3、4、5、6、7、8、9
      写法: ( D ) 10 — — D e c i m a l 或 ( D ) 10 = ∑ i = − m n − 1 D i ⋅ 1 0 i (D)_{10} —— Decimal \quad 或\quad (D)_{10}=\sum\limits_ {i=-m}^{n-1}D_i·10^i (D)10Decimal(D)10=i=mn1Di10i

    • 二进制

      特点:有两个基数:0、1
      写法: ( B ) 2 — — B i n a r y 或 ( B ) 2 = ∑ i = − m n − 1 B i ⋅ 2 i (B)_{2}——Binary或(B)_2=\sum\limits_{i=-m}^{n-1} B_i · 2^i (B)2Binary(B)2=i=mn1Bi2i

    • 八进制

      特点:有八个基数:0、1、2、3、4、5、6、7
      写法: ( O ) 8 — — O c t a l 或 ( O ) 8 = ∑ i = − m n − 1 = O i ⋅ 8 i (O)_{8}——Octal \quad 或 \quad (O)_{8}=\sum\limits_{i=-m}^{n-1}=O_i·8^i (O)8Octal(O)8=i=mn1=Oi8i

    • 十六进制
      特点:有十六个基数:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
      写法: ( H ) 16 — — H e x a d e c i m a l 或 ( H ) 16 = ∑ i = − m n − 1 = H i ⋅ 1 6 i (H)_{16}——Hexadecimal \quad 或 \quad (H)_{16}=\sum\limits_{i=-m}^{n-1}=H_i·16^i (H)16Hexadecimal(H)16=i=mn1=Hi16i

    不同进制数对照表

    其实0~9 和 a~f都只是符号而已,如果采用 n 进制,那么我们就用到 n 种符号来排列组合即可,当然,符号是可以重复的

    进制转化

    • 整数转换

    转换 正整数 的进制的有一个简单算法,就是通过用目标基数作长除法;余数给出从最低位开始的“数字”。

    a 进制转化为 b 进制,除 r 取余数,直至商为零,余数倒序排序

    例如,1020304 从 10 进制转到 7 进制:

    举例

    再如,10110111 从 2 进制到 5 进制:(注意:b 要先转换成 a 的进制 )

    举例

    • 记忆口诀:除 b 取余,逆序排列

    • 其他进制转换与二进制的相互转换

    八进制和二进制

    二进制转换为八进制,采用“3 位并 1 位”,按从右向左方向,每 3 位二进制位一组,最高位不足 3 位,添 0 补足 3 位,然后将各组 3 位二进制数加权展开,得到八进制数。

    • 小数转换

    转换一个“十进制” 小数,可以用重复乘法,将整数部分作为“数字”。不幸的是有限小数不一定转换成为有限小数,例如 0.1A4C 从 16 进制转换到 9 进制:

    举例

    • 记忆口诀:1取整,顺序排列 (1 在这里指的是位权)

    进制的简单运算

    1. 二进制加法:1+0=1、1+1=10、11+10=101、111+111=1110

    1. 二进制减法:1-0=1、10-1=1、101-11=10、1100-111=101

    1. 八进制加法:3+4=7、5+6=13、75+42=137、2427+567=3216

    1. 八进制减法:6-4=2、52-27=23、307-141=146、7430-1451=5757

    1. 十六进制加法:6+7=D、18+BA=D2、595+792=D27、2F87+F8A=3F11

    1. 十六进制减法:D-3=A、52-2F=23、E07-141=CC6、7CA0-1CB1=5FEF

    乘法和除法相对来说比较复杂,涉及到逻辑门运算,属于计算机组成原理中的内容,先挖个坑,日后再填

    • 二进制是如何将加减乘除变换为加法实现的?

    加法是如何由逻辑运算与、或、异或来实现的?

    总结

    • 十进制(D),二进制(B),八进制(O),十六进制(H)

    以上内容只是说了进制转换中如何计算的问题,是一种机械化的理解。以前见到过一篇关于进制的文章,写的很好,可我现在找不到了,遗憾。进一步用代码理解进制 理解进制转换的原理

    要注意的几个地方:

    1. 在进行进制转换时,长除法中的除数的进制和被除数的进制要保持一致
    2. 从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示,不足四位的用 0 补足
    3. 十进制转其他进制:整数部分用除基取余法,小数部分用乘基取整法,然后将整数与小数部分拼接成一个数作为转换的最后结果

    其他数制转为 十进制 ,套公式即可(b=10)。一般来讲,b 进制系统中的数有如下形式:

    ( a n a n − 1 . . . a 1 a 0 . c 1 c 2 c 3 . . . ) b = ∑ k = 0 n a k b k + ∑ k = 1 ∞ c k b − k (a_{n}a_{{n-1}}...a_{1}a_{0}.c_{1}c_{2}c_{3}...)_{b}=\sum _{{k=0}}^{n}a_{k}b^{k}+\sum _{{k=1}}^{\infty }c_{k}b^{{-k}} (anan1...a1a0.c1c2c3...)b=k=0nakbk+k=1ckbk

    手指二进制

    • 看完这个我笑了 hiahiahia

    拓展阅读

    二进制是计算机最适合的数据表示方法,把十进制数的各位数字变成一组对应的二进制代码,用 4 位二进制数来表示 1 位十进制数,称为二进制编码的十进制数(Binary Code Decimal),即 BCD 码。4 位二进制数可以组合出 16 种代码,能表示 16 种不同的状态,只需要使用其中的 10 种状态,就可以表示十进制数的 0~9 十个数码,而其他的 6 种状态为冗余状态。由于可以取任意的 10 种代码来表示 10 个数码,所以就可能产生多种 BCD 编码。BCD 编码既具有二进制数的形式,又保持了十进制数的特点,可以作为人机联系的一种中间表示,也可以用它直接进行运算。下图列出了几种常见的 BCD 码。

    • 8421 码

    8421 码又称为自然(Nature)BCD 码,简称 NBCD 码,4 位二进制代码的位权从高到低分别为 8、4、2、1,这种编码的主要特点是:

    • 它是一种有权码,设其各位的值为 b3b2b1b0,则它所表示的十进制数为 D=8b3+4b2+2b+1b0
    • 简单直观。每个代码与它所代表的十进制数之间符合二进制数和十进制数相互转换的规则
    • 不允许出现 1010~1111。这 6 个代码在 8421 码中是非法码。

    注意:尽管在 8421 码中 0~9 十个数码的表示形式与用二进制表示的形式一样,但这是两个完全不同的概念,不能混淆。例如,一个两位的十进制数 39,它可以表示为(00111001)421 与 100111B,这两者是完全不同的。

    • 2421 码

    这种编码各位的位权从高到低分别为 2、4、2、1,其主要特点是:

    • 它也是一种有权码,所表示的十进制数为 D=2b3+4b2+2b1+1b0
    • 它又是一种对 9 的自补码,即某数的 2421 码,只要自身按位取反,就能得到该数对 9 补数的 2421 码。例如:3 的 2421 码是 0011,3 对 9 的补数是 6,而 6 的 2421 码是 1100,即将 3 的 2421 码自身按位取反可得到 6 的 2421 码。在十进制运算中,采用自补码,可以使运算器线路简化。
    • 不允许出现 0101~1010。这 6 个代码在 2421 码中是非法码。

    对于有权码来说,当规定各位的权不同时,可以有多种不同的编码方案,例如还有 4221 码、4421 码、5421 码和 84-2-1 码等。

    • 余 3 码

    余 3 码是一种无权码,从表 2-7 中可以看出,余 3 码是在 8421 码的基础上加 0011 形成的,因每个数都余 3,故称余 3 码,其主要特点是:

    • 它是一种无权码,在这种编码中各位的“1”不表示一个固定的十进制数值,因而不直观,且容易搞错。

    • 它也是一种对 9 的自补码。

    • 不允许出现 00000010,11011111。这 6 个代码在余 3 码中是非法码。

    • 格雷码(Gray 码)

    十进制 Gray 码的方案有很多种,表 2-7 中列出的只是其中的一种。Gray 码可以避免在计数时发生中间错误,所以也被称为可靠性编码。其主要特点是:

    • 它也是一种无权码。
    • 从一种代码变到相邻的下一种代码时,只有一个二进制位的状态在发生变化。
    • 具有循环特性,即首尾两个数的 Gray 码也只有一个二进制位不同,因此 Gray 码又称为循环码。
    • 十进制 Gray 码也有 6 个代码为非法码,视具体方案而定。

    参考文章

    二进制/八进制/十进制/十六进制 怎么学会?

    wikipedia — 手指二进制

    进制(二进制、十进制、八进制、十六进制)

    拓展阅读摘自教材【计算机组成原理/蒋本珊编著.一 3 版.一北京:清华大学出版社,2013.8】

    版权声明


    展开全文
  • 二进制和十六进制

    千次阅读 2018-08-16 08:40:17
    不管用什么高级语言编写的程序最后都要转换为二进制语言,才能在计算机上执行,因此掌握二进制知识对学习编程语言是非常有帮助的。本篇和同学们探讨二进制计数原理以及与十进制、十六进制的转换。通过本篇的学习,你...

    课程导言

    【最早的编程语言是二进制语言,也是计算机能够直接识别的唯一语言。不管用什么高级语言编写的程序最后都要转换为二进制语言,才能在计算机上执行,因此掌握二进制知识对学习编程语言是非常有帮助的。本篇和同学们探讨二进制计数原理以及与十进制、十六进制的转换。通过本篇的学习,你将了解到为什么计算机能够直接识别二进制语言,二进制的计数原理以及与十进制、十六进制之间的数值转换。】

     

    在讲述二进制之前,先做一个小游戏。伸出我们的右手,从小指开始,依次到大拇指分别代表数字1、2、4、8、16。并且每个手指分为两种状态,手指伸直为1状态,手指弯曲为0状态。然后分别做每个手指自由伸直或弯曲动作,记录其状态和每个手指的数字之和,状态顺序从大拇指开始:

    (1)动作:伸直小指、中指和大拇指,弯曲无名指和食指。

    状态:10101        

    数字之和:21

    (2)动作:伸直小指、无名指和中指,弯曲大拇指和食指。

    状态:00111        

    数字之和:7

    (3)动作:伸直全部手指。

    状态:11111        

    数字之和:31

    有同学可能会问,做这个游戏的意义在什么地方呢?这个游戏用直观化的方式演示了二进制数到十进制数的转换,五个手指的伸直和弯曲的状态组合用0和1表述出来,就是我们本课程要探讨的二进制数,游戏中记录的数字之和就是二进制数的十进制表示。

    前面的游戏可以把5个二进制数转换为十进制数,同样的道理,也可以把30以内的十进制数转换为二进制数。只需要把十进制数分解成16、8、4、2、1任意数字之和就可以,然后将对应数字的右手手指伸直,没有对应数字的右手手指弯曲,从大拇指开始记录其组合状态,该组合状态就是要转换的二进制数。

    例如:

    十进制数字:5=4+1   对应的二进制数为:00101

    十进制数字:28=16+8+4   对应的二进制数为:11100

    前面的游戏能不能实现更多二进制数的转换呢?当然可以,右手五个手指表示5个二进制数,如果再加上左手就可以表示10个二进制数了,所能表示的十进制数也更大。依次类推,多人合作可以表示更多位的二进制数和更大的十进制数。

    从前面的游戏中可以看出,二进制数只有两个状态0和1,二进制数的这个特质非常适合描述电路的通与短、开关的打开与关闭,计算机的电路都是由电子器件组成的,电子器件的状态也分为0(低电位)和1(高电位),二进制的特征正好满足了计算机中电子器件的运算要求,因此计算机内部运算都采用二进制运算,能够识别的数也是二进制数。

    计算机能够识别的数制是二进制数,二进制数是用0和1两个数字来表示的数,计算机的指令集也是采用二进制表示,机器语言就是用二进制数来编写程序。

    可以借助十进制数来理解二进制数。在十进制中,最开始学习的是十以内的加法,之后是两位数的加法,在两位数加法的学习中,就需要逢十进一了,按进位的原则进行记数的方法叫做进位记数制,也称为“数制”或“进制”。

    我们平时用的最多的就是十进制,时间是六十进制,也就是说逢六十进一,例如60秒进1分,60分进1小时。因此每一种数制的进位都遵循一个规则,那就是——逢n进1。这里的n叫做基数。

    在十进制中,每一位有0、1、2、3、4、5、6、7、8、9十个数码,因此基数为10,超过9就必须用多位数来表示,并遵循逢十进一的原则。一个任意的十进制数可以表示为:

    blob.png

    其含义是:

    blob.png

    其中ai(i=0,1…,n),bj(j=1,2,…,m)是0、1、2、3、4、5、6、7、8、9十个数码中的一个。

    上式中相应于每位数字的10n称为该数字的权,其大小是以基数为底,数码所在位置的序号为指数的整数次幂。

    例如:十进制数1111.111

    这个十进制数的7个位数虽然都是1,但是每个位数1表示的数值意义不同,从左往右数第一个1表示blob.png,第二个1表示blob.png

    ,……,第7个1表示0.001=10-3,每个位数表示的数值叫做位权,也就是基数的n幂。十进制数1111.111以小数点为界,整数部分自右向左,依次是基数的0次、1次、2次、3次幂。小数部分,自左向右,分别是基数的-1次、-2次、-3次幂。每位数字乘以其权所得的乘积之和即为所表示数的值。

    例如:

    blob.png

    十进制是人们最熟悉、最常用的一种数制,但它不是唯一的数制。例如计时用的时、分、秒就是按60进制计数的。基数为r的r进制数可以表示为:

    blob.png

    二进制和十六进制数

    计算机就其本身来说是一个电器设备,为了能够快速存储、处理、传递信息,其内部采用了大量的电子元件,在这些电子元件中,电路的通和断、电压高低,这两种状态最容易实现,也最稳定、也最容易实现对电路本身的控制。计算机工程师将计算机所能表示这样的状态,用0,1来表示、即用二进制数表示计算机内部的所有运算和操作。二进制数运算非常简单,计算机很容易实现,所以计算机内部都用二进制编码进行数据的传送和计算。

    二进制的基数为2,只有0、1两个数码,并遵循逢二进一的原则,它的各位权是以2k表示的,因此二进制数blob.png的值为:

    blob.png

    其中ai,bj为0、1两个数码中的一个。例如:

    blob.png

    其中数的下标表示该数的基数r,即二进制的101101与十进制的45等值。

    n位的二进制数可以表示2n个数。例如:3位二进制数可以表示8个数,分别是:

    二进制数    相对应的十进制数
    000          0
    001          1
    010          2
    011          3
    100          4
    101          5
    110          6
    111          7

    而4位二进制数则能表示十进制的0 ~ 15共16个数如下:

    二进制数    相对应的十进制数
    0000          0
    0001          1
    0010          2
    0011          3
    0100          4
    0101          5
    0110          6
    0111          7
    1000          8
    1001          9
    1010          10
    1011          11
    1100          12
    1101          13
    1110          14
    1111          15

    为了方便阅读及书写,经常使用十六进制来表示二进制数,十六进制的基数是16,数码为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其中用A,B,C,D,E,F(字母不区分大小写)这六个字母来分别表示10,11,12,13,14,15。

    按同样的方法,可以很容易地掌握十六进制数的表示方法。例如:

    blob.png

    在计算机编程语言中,通常用数字后面跟一个英文字母来表示该数的数制。十进制一般用D(Decimal)、二进制数用B(Binary)、十六进制用H(Hexadecimal)来表示。例如:23AH、570D、110101B、0075H,…。当然也可以用这些字母的小写形式。

    不同进制数的相互转换

    计算机中采用的是二进制,但用计算机解决实际问题时对数值的输入输出通常使用十进制,这就有一个十进制向二进制转换或由二进制向十进制转换的过程。也就是说,在使用计算机进行数据处理时首先必须把输入的十进制数转换成计算机所能接受的二进制数;计算机在运行结束后,再把二进制数转换为人们所习惯的十进制数输出。

    1、二进制数转换成十进制数  

     把二进制数转换成十进制数就是用“按权相加法”,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。

     例:把二进制数110.11转换成十进制数。 

    blob.png

    2、十进制数转换为二进制数 

      前面“按权相加法”中,权的值在小数点左边和小数点右边是不一样的。所以,十进制数转换为二进制数时,整数和小数的转换方法也不同,一般先把十进制数的整数部分和小数部分分别转换后,再加以合并。

    十进制整数转换为二进制整数采用"除2取余,逆排序"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把所有余数按逆序排列,也就是把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。这就是所谓“除2取余,逆序排列”。

    例:将一个十进制数25转换为二进制数。

     

       blob.png           

                                   

    3、十六进制和二进制之间的转换

    由于十六进制的基数是2的幂,所以这两种数制之间的转换是十分容易的。一个二进制数,只要把它从低位到高位每4位组成一组,直接用十六进制数来表示就可了。

    例:0011  0101  1011  1111 = 35BF

          3     5     B     F

    反之,把十六进制数中的每一位用4位二进制数表示,就形成相应的二进制数了。

                  A     1     9     C

    例:A19C = 1010  0001  1001  1100

    4、十六进制数转换为十进制数

    同二进制数转换十进制数相同,各位十六进制数与其对应权值的乘积之和即为与此十六进制相对应的十进制数。

    blob.png

    十进制数转换为十六进制数也可使用除法进行。

    二进制数是逢二进位的进位制,0、1是基本算符,计算机运算基础采用二进制。编程过程中经常会用到十六进制,而十进制的使用非常少,这是因为十六进制和二进制有天然的联系:四个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成十六进制只要每4位进行转换就可以了。

     

    ■ 课程小结

    1、二进制只有两个数字,就是0和1,类似开关的接通和断开。计算机里面的芯片都是电子电路,也只有两种状态,高电位(通电)和低电位(断电),因此用二进制表示电子电路的状态是最合适不过了,不用任何翻译过程,电子电路会自动识别用二进制语言写的代码。

    2、二进制和其它进制是可以互相转换的,如十进制和十六进制,具体转换方法课程已经介绍的比较详细了。这里主要说一说为什么进制间要相互转换?我们知道计算机内部是用二进制表示的,但人们用计算机工作时,输入的都是十进制数和字符,这就需要把人们输入的数据通过处理程序转换为计算机能够识别的二进制数。同样的道理,当人们需要从计算机查询信息时,处理程序就需要把二进制数转换成人们能够容易识别的十进制数或者字符。

    从转换过程看,好像没有十六进制的事,其实十六进制是为了方便编程人员编写代码而提供的,主要是在编程语言中,用十六进制表示数值特别方便,可以以较少的数位表示较大的数,而且十六进制和二进制的转换也非常方便,因此程序员更喜欢在代码中用十六进制表示数值。

     

    ■ 思考与练习

    1、将下列二进制数转换为十六进制数和十进制数:

    (1)10101   (2)10000000  (3)11111111

    2、用除法将下列十进制数转换为二进制数和十六进制数:

    (1)369    (2)10000   (3)4095

    3、将下列十六进制数转换为二进制数和十进制数:

    (1)FA     (2)5B     (3)F234

     

    转载于编程微课

    原文链接:二进制和十六进制

    展开全文
  • 什么二进制文件

    千次阅读 2019-12-28 22:10:42
    包含在ASCII及扩展 ASCII字符中编写的数据或程序...计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码...

    转自:https://baike.baidu.com/item/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6/996661


    包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件。

    中文名

    二进制文件

    外文名

    BINary files

    外国语缩写

    BIN(作文件扩展名

    目录

    1. 定义
    2. 使用二进制文件的好处
    1. 二进制文件的储存方式
    2. 如何使用语句操作二进制文件
    1. 用例

    定义

    广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名。狭义的二进制文件即除文本文件以外的文件。文本文件是一种由很多行字符构成的计算机文件。文本文件存在于计算机系统中,通常在文本文件最后一行放置文件结束标志。文本文件的编码基于字符定长,译码相对要容易一些;二进制文件编码是变长的,灵活利用率要高,而译码要难一些,不同的二进制文件译码方式是不同的。

    从本质上来说他们之间没有什么区别,因为他们在硬盘上都有一种的存放方式--二进制,但是如果要对他们有些区分的话,那可以这样理解。每个字符由一个或多个字节组成,每个字节都是用的-128—127之间的部分数值来表示的,也就是说,-128——127之间还有一些数据没有对应任何字符的任何字节。如果一个文件中的每个字节的内容都是可以表示成字符的数据,我们就可以称这个文件为文本文件,可见,文本文件只是二进制文件中的一种特例,为了与文本文件相区别,人们又把除了文本文件以外的文件称为二进制文件,由于很难严格区分文本文件和二进制文件的概念,所以我们可以简单地认为,如果一个文件专门用于存储文本字符的数据,没有包含字符以外的其他数据,我们就称之为文本文件,除此之外的文件就是二进制文件。

    使用二进制文件的好处

    为什么要使用二进制文件。原因大概有三个:
      第一是二进制文件比较节约空间,这两者储存字符型数据时并没有差别。但是在储存数字,特别是实型数字时,二进制更节省空间,比如储存 Real*4 的数据:3.1415927,文本文件需要 9 个字节,分别储存:3 . 1 4 1 5 9 2 7 这 9 个 ASCII 值,而二进制文件只需要 4 个字节(DB 0F 49 40)
      第二个原因是,内存中参加计算的数据都是用二进制无格式储存起来的,因此,使用二进制储存到文件就更快捷。如果储存为文本文件,则需要一个转换的过程。在数据量很大的时候,两者就会有明显的速度差别了。
      第三,就是一些比较精确的数据,使用二进制储存不会造成有效位的丢失。 [1] 

    二进制文件的储存方式

    列举一个二进制文件如下:

    00000000h:0F 01 00 00 0F 03 00 00 12 53 21 45 58 62 35 34; .........S!EXb54

    00000010h:41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50; ABCDEFGHIGKLMNOP

    这里列出的是在 UltraEdit(UE) 里看到的东西。其实只有红色部分是文件内容。前面的是 UE 加入的行号。后面的是 UE 尝试解释为字符型的参考。
      这个文件一共有 32 字节长。显示为两列,每列 16 个字节。实际上,这仅仅是 UE 的显示而已。真实的文件并不分行。仅仅知道这个文件的内容,如果我们没有任何说明的话,是不能看出任何有用信息的。
      下面我规定一下说明:我们认为,前 4 个字节是一个 4 字节的整型数据(0F 01 00 00 十六进制:10Fh 十进制:271)。这 4 个字节之后的 4 个字节是另一个 4 字节的整型数据(0F 03 00 00 十六进制:30Fh 十进制:783)。其后的 4 个字节(12 53 21 45 )表示一个 4 字节的实型数据:2.5811919E+3。再其后的 4 个字节(58 62 35 34)表示另一个 4 字节的实行数据:1.6892716E-7。而只后的 16 个字节(41 42 43 44 45 46 47 48 49 47 4B 4C 4D 4E 4F 50)我们认为是 16 个字节的字符串(ABCDEFGHIGKLMNOP)
      实际上,二进制文件只是储存数据,并不写明数据类型,比如上面的第 9 字节到第 16 字节(12 53 21 45 58 62 35 34),我们刚才认为是 2 个 4 字节的实型,其实也可以认为是 8 个字节的字符型( S!EXb54)。而后面的 16 个字节的字符串(ABCDEFGHIGKLMNOP),我们也可以认为是 2 个 8 字节的整型,或者 4 个 4 字节的整型,甚至 2 个 8 字节的实型,4 个 4 字节的实型,等等等等。
      因此,面对一个二进制文件,我们不能准确地知道它的含义,我们需要他的数据储存方式的说明。这个说明告诉我们第几个字节到第几个字节是什么类型的数据,储存的数据是什么含义。否则的话,我们只能猜测,或者无能为力。 [1] 

    如何使用语句操作二进制文件

    我们将上面的那个二进制文件保存为:TestBin.Bin 来举例。
      读取和写入二进制其实是两个很类似的操作,了解了其中之一,另一个也就不难了。

    二进制文件我们通常使用直接读取方式,Open 语句可以写为:

    引用

    Open( 12 , File = 'TestBin.Bin' , Access = 'Direct' , Form = 'Unformatted' , RecL = 4 )

    上面的 Access 表示直接读取方式,Form 表示无格式储存。比较重要的是 RecL 。我们读取数据时,是用记录来描述单位的,每一次读入或写入是一个记录。记录的长度在 Open 时就确定下来,以后不能改变。如果需要改变,只能 Close 以后再此 Open。
      记录长度在某些编译器下表示读取的 4 字节长度的倍数,规定为 4 表示记录长度为 16 字节。有些编译器下就直接表示记录的字节数,规定为 4 则表示记录长度为 4 字节。这个问题需要参考编译器手册。在 VF 系列里,这个值是前面一个含义。可以通过设置工程属性的 Fortran,Data,Use Bytes as RECL= Unit for Unformatted Files 来改变,使之成为后一个含义。在命令行模式下,则使用 /assume:byterecl 这个编译选项。
      确定 RecL 大小是我们需要做的事情,一般来说,不适合太大,也不适合太小。还需要结合数据储存方式来考虑。太小的话,我们需要执行读写的次数就多,太大的话,我们就不方便操作小范围的数据。
      有时候我们甚至会分多次来读取数据,每一次的 RecL 都不同。对于上面的 TestBin.Bin 文件来说,它比较简单,我以 16 字节长度和 8 字节长度两种读取方式来演示,你甚至可以一次 32 个字节长度全部读完。 [1] 

    用例

    C++程序语言学习过程中常见名词,相对于Binary file的是Text file(纯文本文件)。

    C++中二进制文件读写函数:

    fread

    fwrite

    ifstream.read()

    ofstream.write()

    文件读

    文件写


      

     

    展开全文
  • linux二进制文件分析 “这个世界上有十​​种人:懂二进制的人和不懂二进制的人。” Linux提供了丰富的工具集,可轻松进行二进制分析! 无论您的工作角色是什么,如果您在Linux上工作,了解有关这些工具的基础知识...

    linux二进制文件分析

    “这个世界上有十​​种人:懂二进制的人和不懂二进制的人。”

    Linux提供了丰富的工具集,可轻松进行二进制分析! 无论您的工作角色是什么,如果您在Linux上工作,了解有关这些工具的基础知识将有助于您更好地了解系统。

    在本文中,我们将介绍这些Linux工具和命令中最流行的一些,其中大多数将作为Linux发行版的一部分本地提供。 如果没有,您可以随时使用软件包管理器来安装和浏览它们。 请记住:在正确的场合学习使用正确的工具需要足够的耐心和练习。

    文件

    作用:帮助确定文件类型。

    这将是您进行二进制分析的起点。 我们每天处理文件。 并非所有的东西都是可执行的类型。 那里有各种各样的文件类型。 在开始之前,您需要了解要分析的文件类型。 它是二进制文件,库文件,ASCII文本文件,视频文件,图片文件,PDF,数据文件等吗?

    file命令将帮助您确定要处理的确切文件类型。

    
       
    $ file /bin/ls
    /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=94943a89d17e9d373b2794dcb1f7e38c95b66c86, stripped
    $
    $ file /etc/passwd
    /etc/passwd: ASCII text
    $

    dd

    它的作用:打印共享对象依赖性。

    如果您已经在可执行二进制文件上使用了上面的file命令,则不能错过输出中的“动态链接”消息。 这是什么意思?

    开发软件时,我们尽量不要重新发明轮子。 大多数软件程序需要执行一组通用任务,例如打印输出或从标准文件中读取或打开文件等。所有这些通用任务都通过一组通用函数抽象出来,每个人都可以使用它们代替编写自己的变体。 这些常用功能放在名为libcglibc的库中。

    如何找到可执行文件所依赖的库? 这就是ldd命令出现的地方。 针对动态链接的二进制文件运行它会显示其所有依赖的库及其路径。

    
       
    $ ldd /bin/ls
            linux-vdso.so.1 =>  (0x00007ffef5ba1000)
            libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fea9f854000)
            libcap.so.2 => /lib64/libcap.so.2 (0x00007fea9f64f000)
            libacl.so.1 => /lib64/libacl.so.1 (0x00007fea9f446000)
            libc.so.6 => /lib64/libc.so.6 (0x00007fea9f079000)
            libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fea9ee17000)
            libdl.so.2 => /lib64/libdl.so.2 (0x00007fea9ec13000)
            /lib64/ld-linux-x86-64.so.2 (0x00007fea9fa7b000)
            libattr.so.1 => /lib64/libattr.so.1 (0x00007fea9ea0e000)
            libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fea9e7f2000)
    $

    跟踪

    它的作用:库调用跟踪器。

    现在,我们知道如何使用ldd命令查找可执行程序所依赖的库。 但是,一个库可以包含数百个函数。 在这数百种中,二进制文件实际使用的功能是什么?

    ltrace命令显示在运行时从库中调用的所有函数。 在下面的示例中,您可以看到调用的函数名称以及传递给该函数的参数。 您还可以在输出的最右侧看到这些函数返回的内容。

    
       
    $ ltrace ls
    __libc_start_main(0x4028c0, 1, 0x7ffd94023b88, 0x412950 <unfinished ...>
    strrchr("ls", '/')                                                                  = nil
    setlocale(LC_ALL, "")                                                               = "en_US.UTF-8"
    bindtextdomain("coreutils", "/usr/share/locale")                                    = "/usr/share/locale"
    textdomain("coreutils")                                                             = "coreutils"
    __cxa_atexit(0x40a930, 0, 0, 0x736c6974756572)                                      = 0
    isatty(1)                                                                           = 1
    getenv("QUOTING_STYLE")                                                             = nil
    getenv("COLUMNS")                                                                   = nil
    ioctl(1, 21523, 0x7ffd94023a50)                                                     = 0
    << snip >>
    fflush(0x7ff7baae61c0)                                                              = 0
    fclose(0x7ff7baae61c0)                                                              = 0
    +++ exited (status 0) +++
    $

    十六进制转储

    作用:以ASCII,十进制,十六进制或八进制显示文件内容。

    通常,您使用不知道如何处理该文件的应用程序打开文件。 尝试使用vim打开可执行文件或视频文件; 您将看到的只是乱码在屏幕上。

    在Hexdump中打开未知文件可帮助您查看文件中包含的内容。 您也可以使用某些命令行选项选择查看文件中数据的ASCII表示形式。 这可能有助于您了解文件的类型。

    
       
    $ hexdump -C /bin/ls | head
    00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
    00000010  02 00 3e 00 01 00 00 00  d4 42 40 00 00 00 00 00  |..>......B@.....|
    00000020  40 00 00 00 00 00 00 00  f0 c3 01 00 00 00 00 00  |@...............|
    00000030  00 00 00 00 40 00 38 00  09 00 40 00 1f 00 1e 00  |....@.8...@.....|
    00000040  06 00 00 00 05 00 00 00  40 00 00 00 00 00 00 00  |........@.......|
    00000050  40 00 40 00 00 00 00 00  40 00 40 00 00 00 00 00  |@.@.....@.@.....|
    00000060  f8 01 00 00 00 00 00 00  f8 01 00 00 00 00 00 00  |................|
    00000070  08 00 00 00 00 00 00 00  03 00 00 00 04 00 00 00  |................|
    00000080  38 02 00 00 00 00 00 00  38 02 40 00 00 00 00 00  |8.......8.@.....|
    00000090  38 02 40 00 00 00 00 00  1c 00 00 00 00 00 00 00  |8.@.............|
    $

    它的作用:打印文件中可打印字符的字符串。

    如果Hexdump在您的用例中看起来有点过大,而您只是在二进制文件中寻找可打印的字符,则可以使用strings命令。

    开发软件时,会向其中添加各种文本/ ASCII消息,例如打印信息消息,调试信息,帮助消息,错误等。 只要所有这些信息都存在于二进制文件中,它将使用字符串转储到屏幕上。

     $ strings /bin/ls 
    

    Readelf

    它的作用:显示有关ELF文件的信息。

    ELF(可执行文件和可链接文件格式)是可执行文件或二进制文件的主要文件格式,不仅在Linux上,在各种UNIX系统上也是如此。 如果您使用过诸如file命令之类的工具,该工具会告诉您该文件为ELF格式,那么下一个逻辑步骤将是使用readelf命令及其各种选项来进一步分析该文件。

    使用readelf时,方便参考实际的ELF规范非常有用。 您可以在此处找到规格。

    
       
    $ readelf -h /bin/ls
    ELF Header:
      Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
      Class:                             ELF64
      Data:                              2's complement, little endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              EXEC (Executable file)
      Machine:                           Advanced Micro Devices X86-64
      Version:                           0x1
      Entry point address:               0x4042d4
      Start of program headers:          64 (bytes into file)
      Start of section headers:          115696 (bytes into file)
      Flags:                             0x0
      Size of this header:               64 (bytes)
      Size of program headers:           56 (bytes)
      Number of program headers:         9
      Size of section headers:           64 (bytes)
      Number of section headers:         31
      Section header string table index: 30
    $

    objdump

    它的作用:显示来自目标文件的信息。

    当您编写源代码时,会创建二进制文件,而使用称为编译器的工具对源代码进行编译也就不足为奇了。 该编译器生成与源代码等效的机器语言指令,然后可由CPU执行以执行给定任务。 可以通过称为汇编语言的助记符来解释该机器语言代码。 汇编语言是一组指令,可以帮助您了解程序正在执行的操作以及最终在CPU上执行的操作。

    objdump实用程序读取二进制或可执行文件,并将汇编语言指令转储到屏幕上。 汇编知识对于理解objdump命令的输出至关重要。

    请记住:汇编语言是特定于体系结构的。

    
       
    $ objdump -d /bin/ls | head

    /bin/ls:     file format elf64-x86-64


    Disassembly of section .init:

    0000000000402150 <_init@@Base>:
      402150:       48 83 ec 08             sub    $0x8,%rsp
      402154:       48 8b 05 6d 8e 21 00    mov    0x218e6d(%rip),%rax        # 61afc8 <__gmon_start__>
      40215b:       48 85 c0                test   %rax,%rax
    $

    痕迹

    它的作用:跟踪系统调用和信号。

    如果您使用了前面提到的ltrace ,请考虑strace是相似的。 唯一的区别是, strace实用程序可以跟踪系统调用,而不是调用库。 系统调用是您与内核交互以完成工作的方式。

    举个例子,如果您想在屏幕上打印一些东西,您将使用标准库libc中printfputs函数; 但是,在幕后,最终将进行名为write的系统调用,以将某些内容实际打印到屏幕上。

    
       
    $ strace -f /bin/ls
    execve("/bin/ls", ["/bin/ls"], [/* 17 vars */]) = 0
    brk(NULL)                               = 0x686000
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f967956a000
    access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
    open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
    fstat(3, {st_mode=S_IFREG|0644, st_size=40661, ...}) = 0
    mmap(NULL, 40661, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9679560000
    close(3)                                = 0
    << snip >>
    fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9679569000
    write(1, "R2  RH\n", 7R2  RH
    )                 = 7
    close(1)                                = 0
    munmap(0x7f9679569000, 4096)            = 0
    close(2)                                = 0
    exit_group(0)                           = ?
    +++ exited with 0 +++
    $

    纳米

    它的作用:列出目标文件中的符号。

    如果您使用的是未剥离的二进制文件,那么nm命令将为您提供在编译过程中嵌入在二进制文件中的有价值的信息。 nm可以帮助您从二进制文件中识别变量和函数。 您可以想象如果您无法访问所分析的二进制代码的源代码,这将有多大用处。

    为了展示nm ,我们将快速编写一个小程序并使用-g选项对其进行编译,并且还将看到使用file命令不会剥离二进制文件。

    
       
    $ cat hello.c
    #include <stdio.h>

    int main() {
        printf("Hello world!");
        return 0;
    }
    $
    $ gcc -g hello.c -o hello
    $
    $ file hello
    hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3de46c8efb98bce4ad525d3328121568ba3d8a5d, not stripped
    $
    $ ./hello
    Hello world!$
    $


    $ nm hello | tail
    0000000000600e20 d __JCR_END__
    0000000000600e20 d __JCR_LIST__
    00000000004005b0 T __libc_csu_fini
    0000000000400540 T __libc_csu_init
                     U __libc_start_main@@GLIBC_2.2.5
    000000000040051d T main
                     U printf@@GLIBC_2.2.5
    0000000000400490 t register_tm_clones
    0000000000400430 T _start
    0000000000601030 D __TMC_END__
    $

    gdb

    它的作用:GNU调试器。

    好吧,并不是二进制文件中的所有内容都可以静态分析。 我们确实执行了一些运行二进制文件的命令,例如ltracestrace ; 但是,软件包含多种条件,可能导致执行各种替代路径。

    分析这些路径的唯一方法是在运行时通过能够在任何给定位置停止或暂停程序,并能够分析信息然后进一步向下移动来进行分析。
    这就是调试器出现的地方,在Linux上, gdb是事实上的调试器。 它可以帮助您加载程序,在特定位置设置断点,分析内存和CPU寄存器等等。 它补充了上面提到的其他工具,使您可以进行更多的运行时分析。

    需要注意的一件事是,一旦使用gdb加载了程序,就会看到它自己的(gdb)提示符。 所有其他命令将在此gdb命令提示符下运行,直到退出。

    我们将使用我们先前编译的“ hello”程序,并使用gdb查看其工作方式。

    
       
    $ gdb -q ./hello
    Reading symbols from /home/flash/hello...done.
    (gdb) break main
    Breakpoint 1 at 0x400521: file hello.c, line 4.
    (gdb) info break
    Num     Type           Disp Enb Address            What
    1       breakpoint     keep y   0x0000000000400521 in main at hello.c:4
    (gdb) run
    Starting program: /home/flash/./hello

    Breakpoint 1, main () at hello.c:4
    4           printf("Hello world!");
    Missing separate debuginfos, use: debuginfo-install glibc-2.17-260.el7_6.6.x86_64
    (gdb) bt
    #0  main () at hello.c:4
    (gdb) c
    Continuing.
    Hello world![Inferior 1 (process 29620) exited normally]
    (gdb) q
    $

    结论

    一旦您对使用这些本机Linux二进制分析工具感到满意,并理解了它们提供的输出,就可以使用更高级和专业的开源二进制分析工具,例如radare2

    翻译自: https://opensource.com/article/20/4/linux-binary-analysis

    linux二进制文件分析

    展开全文
  • 机器语言是计算机能直接识别的二进制代码,由机器指令集构成,能够直接机器执行,不需要编译。是最低级的编程语言。目前机器语言使用很弱,除了机器生产厂家几乎不应用于其他。 二、汇编语言 汇编语言是由一百多...
  • 二进制运算符

    千次阅读 2020-06-23 10:28:52
    二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的...
  • 机器语言:(二进制语言)是用二进制代码表示的计算机语言。能直接识别和执行的一种机器指令的集合。不同机器的机器语言不同。机器语言具有灵活、直接执行和速度快等特点。 (如: 10100010010111100011代表的是A=B...
  • 数据的二进制表示

    千次阅读 2020-02-05 17:07:43
    数据的二进制表示 文章目录数据的二进制...字节:8 位二进制被称为一个 字节 为什么拟定 8 位为一个字节? 因为 8 位能够涵盖基本的字符编码(英文 26 个字母大小写 + 基本符号位等) 实例: 一个英文字母----...
  • 二进制

    万次阅读 2019-05-19 21:34:16
    什么二进制 二进制是一套计数方法,每个位置上的数有 2 种可能(0 - 1);二进制是计算机的执行语言,但是早在计算机出现前就存在这套计数方法,最早可追溯到古埃及。在日常生活中,我们使用的是十进制,每个位置...
  • ## 一、二进制、八进制、十进制、十六进制【扩展内容】### 1.1 进制二进制:逢二进一,数值只有0和1。八进制:逢八进一,数值有0,1,2,3,4,5,6,7十进制:逢十进一,数值有0,1,2,3,4,5,6,7,8,9十六进制:逢十六进一,...
  • 文章开头我只想问一个问题:写了很多代码,你不好奇代码在计算机底层是什么样的吗? 下面将一步一步探索这个过程。首先,大家要有个初步的认识,一次从左到...高级语言(C语言) 汇编语言 二进制机器语言 int add(...
  • 计算机容量和二进制以及编程语言

    千次阅读 2019-07-02 10:29:36
    计算机的容量单位中最基本的是位,而在计算机中位一般是用“0”和“1”来表示位的,也就是我们所说的二进制数,但是最小的存储容量单位是字节(一字节等于八位),下面是关于计算存储容量单位的介绍: 1位 = 1 bit 8...
  • 二进制安全学习路线

    千次阅读 多人点赞 2019-08-14 23:35:17
    在大部分人眼里,所谓的黑客,安全研究者指的就是研究渗透入侵一类的技术的从业者,并不知道什么是逆向工程或者说二进制安全。提起逆向工程也许还有人可以联想到软件破解,如果提起的是二进制安全,那么知道的人就真...
  • 详解计算机内部存储数据的形式—二进制数 前言 要想对程序的运行机制形成一个大致...那么,为什么计算机处理的信息要用二进制数来表示呢? 一、用二进制数表示计算机信息的原因 计算机内部是由  IC(集成电路( Int
  • 计算机基础(一):二进制详解

    千次阅读 多人点赞 2020-07-19 11:50:44
    我们都知道,计算机的底层都是使用二进制数据进行数据流传输的,那么为什么会使用二进制表示计算机呢?或者说,什么二进制数呢?在拓展一步,如何使用二进制进行加减乘除?二进制数如何表示负数呢?本文将一一为你...
  • 文章目录计算机基础- -计算机为什么要使用二进制一、为什么二进制表示二、什么二进制数三、移位运算和乘除的关系四、便于计算机处理的补数五、算数右移和逻辑右移的区别六、逻辑运算的窍门 我们都知道,计算机的...
  • Qt 二进制文件读写

    千次阅读 2021-02-25 21:39:28
    Qt 使用 QFile 和 QDataStream 进行二进制数据文件的读写: QFile 负责文件的 IO 设备接口,即与文件的物理交互; QDataStream 以数据流的方式读取文件内容或写入文件内容。 QDataStream 保存文件时使用的数据编码...
  • python八进制转二进制Python is known for being powerful and easy to use when it comes to math. Both its native capabilities and resourceful libraries like NumPy, Pandas, or Scikit-learn, provide ...
  • Linux 二进制分析

    千次阅读 2018-11-06 11:55:21
    二进制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二进制)来分析应用程序的控制结构和运行方式,有助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案...
  • 字符编码是现实世界的文字与...字符编码以数字的形式呈现,最终又将数字转化会二进制二进制是数据的一种表示形式。例如:十进制表示满十进一,八进制表示满八进一,同理二进制则为满二进一。 十进制:0 1 2 3 ...
  • 下面是显示二进制数的汇编代码 ;定义数据段 data segment dat1 dw 5678H; dw 是表示字, db 标志字节, dd 表示双字 data ends ;每定义一个段时都要有结束的标志 ;声明 code segment assume ds :...
  • 二进制和位运算

    千次阅读 2019-03-15 20:03:26
    所有编程语言都是一种人和计算机之间的翻译工具,人的数组语言翻译成二进制给计算机读取,然后把计算机的二进制数据翻译成人类的语言呈现出来。 16进制 16进制用于缩写(简写)2进制,将2进制从后向前 每4位数转换...
  • 计算机中的二进制

    千次阅读 2018-07-09 22:14:24
    一、概述 &amp;amp;...计算机中的任何数据都是二进制,而编程语言是人与计算机之间的桥梁,编译语言利用算法,解决人类使用十进制与二进制之间的鸿沟。(官方一点) &amp;amp;amp;amp;nbsp;
  • 二进制编码的十进制

    千次阅读 2020-08-25 14:32:35
    二进制编码的十进制数是由于计算机CPU(中央处理单元)的二进制性质而没有舍入错误的精确数字。 这使得bcd数据类型特别适合于财务和簿记目的。 BCD calculations have been present in computer science for quite ...
  • 1.1.二进制思想的提出 1.2.二进制思想的初步实现 1.3.二进制思想在现代计算机上的实现 1.4.二进制运算的好处 2.从晶体管到“1+1=2” 2.1.晶体管如何表示0和1 2.2.从晶体管到门电路 2.3.从门电路到半加器 3....
  • C语言中 怎样显示数据的二进制 最左边的称为高位 最右边的称为低位 高位为0 低位为1 1一个0或1称为1bit 8bit==1byte 1024byte==1kb(1 kilo byte) 1024kb == 1mb (1 million byte) C语言中char占用1byte即8bit 也是...
  • 上一篇我们讲了二进制转十进制的规则,这一篇我们来看看浮点数是如何用二进制表示的。 像100.011这样带小数点的表现形式,是方便我们阅读的二进制形式,在计算机内部是无法直接使用的,那么实际上计算机内部是如何...
  • 二进制数及其运算

    2020-07-28 08:14:13
    计算机的底层都是使用二进制数据进行数据流传输的,那么为什么会使用二进制表示计算机呢?什么二进制数呢?如何使用二进制进行加减乘除?二进制数如何表示负数呢?本文将为你揭晓。 为什么二进制表示 计算机内部...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,825
精华内容 69,930
关键字:

二进制被称为什么语言