精华内容
下载资源
问答
  • 一串二进制数0和1表示称为
    千次阅读
    2021-08-30 23:03:20

    二进制数位,也叫比特位,其实就是指位置,是指二进制数的位置。例如,0101 这是二进制数,而且是 4 位的二进制数,因为有 4 个位置,每个位置放一个二进制数,确切的说是每个位置放一个二进制的数码 0 或者 1。

    比特的英文名称是 binary digit,就是二进制数据的含义。8 个比特,是指 8 个二进制数,每个二进制数要么是 0,要么是 1。比特强调的是二进制数。

    比特是信息量的单位。比特(bit)是二进制单位(binary unit)或二进制数字(binary digit)的缩写,它代表从一个二进制数组中选出一元(0或1)所提供的信息量(若此二元出现的概率相等)。在实际场合,常把每一位二进数字称为一比特,而不论这两个符号出现的概率是否相等。

    一个比特就是一个二进制数,可以是 0 也可以是 1。一个比特位表示一个数位,一个二进制的数位,强调的是位置,这个位置放的是二进制数,比如 4 位二进制数,表示有四个二进制数。比如,4 个比特位,表示有 4 个存放二进制数的位置,每个位置存放的是 0 还是 1,不清楚。

    比特是二进制数的一位包含的信息或 2 个选项中特别指定 1 个的需要信息量称为一比特,是表示信息的最小单位,只有两种状态:0和1。这两个值也可以被解释为逻辑值(真/假、yes/no)、代数符号(+/-)、激活状态(on/off)或任何其他两值属性。一个字节(byte)为8个比特,一个英文字母通常占用一个字节,一个汉字通常占用两个字节。普通计算机系统能读取和定位到最小信息单位是字节(byte),也就是说实际上普通的计算机系统是无法精确读取和定位到比特(bit)级的信息。

    例如:一个计算机的字长为 16 比特,即16 个二进制数,则它所表示的数值信息即为 0—65535。表现 26 个拉丁字母必要的信息量是 5 比特(因为16<26<32)。

    比特的概念,参考这里:https://baike.baidu.com/item/%E6%AF%94%E7%89%B9/3431582?fr=aladdin

    二进制数的概念,参考这里:https://baike.baidu.com/item/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%95%B0/108101?fr=aladdin

    更多相关内容
  • 二进制运算、二进制数表示:原码、反码补码

    文章目录

    一、二进制数计算

    • 二进制数在计算机中是应用最广的,因为它最简单,数码仅1和0两个,可以代表电平的高和低,或者电压的正和负,或者电路的开与关等。对于二进制数,除了与十进制数一样可以进行四则算术运算外,还可以进行逻辑运算,因为它只有两个数码,可以代表两种截然相反的状态。

    (一)二进制四则运算

    • 二进制数的加、减、乘、除四则算术运算法则其实与十进制数的四则算术运算法则是一一对应的。理解了十进制数的四则算术运算法则,二进制数的四则算术运算就一点都不难了。

    1、加法运算法则

    • 0 + 0 = 0 , 0 + 1 = 1 , 1 + 0 = 1 , 1 + 1 = 10 0+0=0,0+1=1,1+0=1,1+1=10 0+0=00+1=11+0=11+1=10,也就是当两个相加的二进制位仅一位为1时,相加的结果为1;如果两个二进制位全是0,相加的结果仍为0;而如果两个相加的二进制位均为1,则结果为10(相当于十进制中的2),也就是“逢2进1”规则,与十进制中的“逢10进1”的道理一样。

    • 在进行二进制加减法运算时,最关键的一点就是逢2进1,进1当1,而借1当2。大家联想一下我们经常使用的十进制数加法运算法则,那就是逢10进1,进1当1,而借1当10,这样一来我们就好理解了。二进制数的加法运算法则只是把原来十进制数加法运算法则中的10改成了2。

    • 计算 ( 10010 ) 2 + ( 11010 ) 2 (10010)_2+(11010)_2 (10010)2+(11010)2的过程如下图所示(注意两数要从最低位开始对齐)
      在这里插入图片描述

    • 1)首先是进行最低位相加,这里加数和被加数都为“0”,根据加法法则可以知道,相加后为“0”;

    • 2)再进行倒数第二位相加,这里加数和被加数都为“1”,根据加法法则可以知道,相加后为“(10)2
      ”,此时把后面的“0”留下,而把第一位的“1”向高一位进“1”;

    • 3)再进行倒数第三位相加,这里加数和被加数都为“0”,根据加法法则可以知道,本来结果应为“0”,但倒第二位已向这位进“1”了,此时就要同时把“被加数”、“加数”和“进位”这三个数加起来了,所以结果应为0+0+1=1;

    • 4)再进行倒数第四位的相加,这里加数和被加数分别为“1”和“0”,倒数第三位也没有进位,根据加法法则可以知道,相加后为“1”;

    • 5)最后是最高位相加,这里加数和被加数都为“1”,根据加法法则可以知道,相加后为“(10)2
      ”。同样需把第一位的“0”留下,并向高位进1,这样会产生新的最高位,值为“1”(如果超出了字长的限制,则新产生的最高位将溢出)。

    • 这样 ( 10010 ) 2 + ( 11010 ) 2 (10010)_2+(11010)_2 (10010)2+(11010)2的最后运算结果为 ( 101100 ) 2 (101100)_2 (101100)2

    2、减法运算法则

    • 1 − 1 = 0 , 1 − 0 = 1 , 0 − 0 = 0 , 0 − 1 = − 1 1-1=0,1-0=1,0-0=0,0-1=-1 11=010=100=001=1,也就是当两个相加的二进制位中同为0或1时,相减的结果为0;如果被减数的二进制位为1,而减数的二进制位为0,则相减的结果仍为1;而如果被减数的二进制位为0,而减数的二进制位为1,则需要向高位借1,但此时是借1当2,与十进制中的借1当10道理一样。
    • 计算 ( 111010 ) 2 − ( 101011 ) 2 (111010)_2-(101011)_2 (111010)2(101011)2的过程如下图所示(注意两数要从最低位开始对齐)
      在这里插入图片描述
    • 1)首先是最低位相减,这里被减数为“0”,减数为“1”,不能直接相减,需要向高位(此时为倒数第二位)借“1”,这样相当于得到了十进制中的“2”,用2减1结果就得到1。
    • 2)再对倒数第二位相减,此时本来被减数和减数均为“1”,但是被减数的该位被上一步借走了1,所以最后就变为“0”(1-1)了。此时也不能直接与减数相减了,又需要向高位(此时为倒数第三位)借1。同样是借1当2,相当于该位总共为0+2=2。这样倒数第二位相减后的结果为2-1=1。
    • 3)用上一步同样的方法计算倒数第三位和倒数第四位的减法运算,结果都为1。
    • 4)再计算倒数第五位的减法运算,此时被减数原来为“1”,可是已被倒数第四位借走了1,所以成了“0”(1-1),而此时减数也为“0”,可以直接相减,得到的结果为“0”。
    • 5)最后计算最高位的相减,被减数和减数均为“1”,可以直接相减,得到的结果为“0”。
    • 这样一来, ( 111010 ) 2 − ( 101011 ) 2 (111010)_2-(101011)_2 (111010)2(101011)2的结果是 ( 001111 ) 2 (001111)_2 (001111)2,由于整数的前导0可以不写,所以最后结果就是 ( 1111 ) 2 (1111)_2 (1111)2

    3、乘法运算法则

    • 0 × 0 = 0 , 0 × 1 = 0 , 1 × 0 = 0 , 1 × 1 = 1 0×0=0,0×1=0,1×0=0,1×1=1 0×0=00×1=01×0=01×1=1,也就只有当两个相乘的二进制位都为1,相乘的结果才为1;两个相乘的二进制位中只要有一位为0(也包括是两位同时为0),则相乘的结果都为0。也可以这么理解:1与任何数相乘的结果就是对应的被乘数;而0与任何数相乘的结果都为0。这与十进制中的乘法运算法则也是一样的。要注意的是,在乘法运算中,乘数的每一位要与被乘数的每一位分别相乘,而不仅是对应位相乘,而且乘数的每一位与被乘数的每一位相乘的结果的最低位要与对应的乘数位对齐。当然这与十进制的乘法运算法则也是一样的,很好理解。
    • 计算 ( 1010 ) 2 × ( 101 ) 2 (1010)_2×(101)_2 (1010)2×(101)2的过程如下图所示(注意两数要从最低位开始对齐)
      在这里插入图片描述
    • 1)首先是乘数的最低位与被乘数的所有位相乘,因为乘数的最低位为“1”,根据乘法法则可以得出,结果其实就是被乘数本身,直接复制下来即可。此处结果就为1010。
    • 2)接着进行的是乘数的倒数第二位与被乘数的所有位相乘,因为乘数的这一位为“0”,根据乘法运算法则可以得出,结果均为“0”。此处结果就为0000。
    • 3)然后是乘数的最高位与被乘数的所有位相乘,此时乘数为“1”,结果就是被乘数本身。此处结果就为1010。
    • 4)最后再按照前面介绍的二进制加法原则对以上三步所得的结果按位相加(但这里的位对齐方式与单纯的二进制数相加不一样,最低位一定要与对应乘数位对齐。这也与十进制的乘法运算方法一样),结果得到 ( 110010 ) 2 (110010)_2 (110010)2

    4、除法运算法则

    • 当被除数大于除数时,商是“1”;当被除数小于除数时,不够除,商只能是“0”,这与十进制的除法也类似。二进制只有两个数(0,1),因此它的商也只能是1或0。
    • 计算 ( 11001 ) 2 ÷ ( 101 ) 2 (11001)_2÷(101)_2 (11001)2÷(101)2的过程如下图所示。
      在这里插入图片描述
    • 1)因为除数为“101”,有3位,所以在被除数中也至少要取3位(从最高位开始取)。被除数的高3位为“110”,恰好比除数“101”大,可以直接相除,但商只能是1(因为二进制的最大数元就是1),然后把被除数减法商“1”与除数相乘后的结果,得到的值为“1”。
    • 2)再从被除数中取下一位“0”下来,与上一步的差“1”值组成新的被除数,为“10”,显然它比除数“101”小,不够除。于是在商的对应位置上输入“0”。
    • 3)继续从被除数中取下一位“1”下来,与上一步的余数“10”值组成新的被除数,为“101”,此数正好与除数“101”相等,所以此时的商取“1”,正好除尽。
    • 这样一来 ( 11001 ) 2 ÷ ( 101 ) 2 (11001)_2÷(101)_2 (11001)2÷(101)2所得的商就是 ( 101 ) 2 (101)_2 (101)2了。

    (二)二进制逻辑运算

    • 逻辑运算是指对因果关系进行分析的一种运算,这也是在计算机中经常采用的一种二进制运算。逻辑运算的结果并不表示数值大小,而是表示一种逻辑概念,若成立则为“真”,或用“1”表示;若不成立,则为“假”,或用“0”表示。二进制的逻辑运算主要有“与”、“或”、“非”和“异或”四种。

    1、“与”运算(AND)

    • “与”运算又称逻辑乘,用符号“·”或“∧”来表示。运算法则如下: 0 ∧ 0 = 0 , 0 ∧ 1 = 0 , 1 ∧ 0 = 0 , 1 ∧ 1 = 1 0∧0=0, 0∧1=0, 1∧0=0, 1∧1=1 00=0,01=0,10=0,11=1,归纳起来也就是在“与”运算中,只要两个参加“与”运算的数的对应位有一个为0,运算结果就为0;仅当两数的对应位均为1时结果才为1,很容易判断。这与前面介绍的二进制乘法运算是一样的。图1-15所示是两个“与”的逻辑运算示例。下图所示的是两个位数不一样的二进制数进行“与”运算,这时要求两个数从最低位开始对齐,在位数少的二进制的最高位前面加上“0”补齐,使得它与位数多的二进制数有一样的位数。
      在这里插入图片描述

    2、“或”运算(OR)

    • “或”运算又称逻辑加,用符号“+”或“∨”表示。运算法则如下: 0 ∨ 0 = 0 , 0 ∨ 1 = 1 , 1 ∨ 0 = 1 , 1 ∨ 1 = 1 0∨0=0, 0∨1=1, 1∨0=1, 1∨1=1 00=0,01=1,10=1,11=1,也就是说,在“或”运算中,只要两个参加“或”运算数的对应位中有一个为1,运算结果就为1,仅当两数的对应位均为0时结果才为0,也很容易判断。如下图所示是两个“或”的逻辑运算示例。同样,进行“或”运算时要求两数从最低位开始对齐,位数少的数在最高位前面加“0”补齐,最终使两个二进制数的位数相同。
      在这里插入图片描述

    3、“非”运算(NOT)

    • “非”运算就是逐位求反的运算,其运算法则为:“0”的反值为“1”,“1”的反值为“0”,也就是“0”与“1”互为反。注意:“非运算”只是针对一个二进制数进行的,这与前面的“与”和“或”运算不一样。如“101110101”进行“非”运算后就得到“010001010”(可简写为“10001010”)。

    4、“异或”运算(XOR)

    • “异或”运算用符号“⊕”来表示。其运算法则如下: 0 ⊕ 0 = 0 , 0 ⊕ 1 = 1 , 1 ⊕ 0 = 1 , 1 ⊕ 1 = 0 0⊕0=0,0⊕1=1, 1⊕0=1, 1⊕1=0 00=001=110=111=0,也就是说,当两个参加“异或”运算的二进制数对应位相同时运算结果为0,不同时运算结果为1。下图所示是“异或”逻辑运算示例。同样,进行“异或”运算时要求两数从最低位开始对齐,位数少的数在最高位前面加“0”补齐,最终使两个二进制数的位数相同。
      在这里插入图片描述

    二、二进制数的表示

    • 原码、反码、补码和移码。其实它们都是计算机中二进制数(称之为“机器数”)的不同表示形式,之所以会有这么多码,最根本的原因就是计算机只有加法运算器,减法运算需要转换成负数的加法。这里又出现一个问题,那就是计算机如何来识别负数?因为它不能像人的大脑一样可以识别“+”、“-”之类的符号,故必须用一个专门的位来表示数的符号,这就是计算机中的“有符号数”的由来。计算机中所有数据最终都是使用二进制数表示的。如何将一个负数用二进制形式来表示?其实,在计算机中负数是以其正数的补码形式表示的。

    (一)真值和字长

    • 负数是通过其正数的补码形式来表示的,那什么是补码呢?这还得从原码、反码说起。在计算机二进制数中其实也包括符号位,并不是所有位都代表数据本身,就像我们常用的十进制数中有正、有负一样。但是二进制中没有“-”这个符号,那么计算机中的机器数的符号是怎样规定的呢?这得从机器数的两个基本概念(真值和字长)说起。

    1、真值

    • 计算机中的二进制机器数分为“有符号数”和“无符号数”两种。“无符号数”就是二进制数的每一位都代表对应位的数值;而在“有符号数”中规定最高位用来表示数据符号,其中1代表负0代表正,这样一来机器数本身就不等于真正的数值了。例如有符号数10000101,其最高位1代表负,所以余下的“0000101”才是数值本身,所以其真正数值是-5,而如果是无符号数,则10000101所代表的是133。为区别起见,把带符号位的机器数所对应的真正数值称为机器数的“真值”。例:00100001的真值=0 0100001=+33(正号可以不写,可以直接写成33),10100011的真值=1 0100011=-35。

    2、字长

    • 在机器数中还有一个概念需要首先弄明白,那就是“字长”。“字长”是指计算机一次可处理的二进制数的码位长度,是计算机进行数据存储和数据处理的运算单位。如我们通常所指的32位处理器,就是指该处理器的字长为32位,也就是一次能处理32位二进制数。通常称16位是一个字,32位是一个双字,64位是两个双字。
    • 数值的转换结果是与字长有关的。如果计算机字长为8位,十进制中的数+5转换成二进制就是00000101,-5转换成二进制就是10000101;但如果字长是16位,+5转换的结果就是00000000 00000101,而-5转换成二进制就是1000000000000101了。也就是对应的机器数要转换为字长所代表的位数。
    • 字长越长代表计算机的处理能力越强,可以处理的数越大。如现在字长普遍是64位的了,这样一来计算机可以处理的二进制数码位长度最大为64位,去掉符号位,则表示计算机可以处理的最大二进制数为2的63次方,最小二进制数就是-2的63次方。而在8位字长中,因为最高位要用于符号位,所以实际可以处理的数值大小范围为-127~-0~0~127(即 2 7 − 1 2^7-1 271),共256个数了;但如果字长是16位,可以处理的数值大小就可以是-32677~-0~0~32767( 2 15 − 1 2^{15}-1 2151)。
    • 注意:以上的“-0”与“0”的机器数是不一样的,在8位字长中,-0为1 0000000,而+0为0 0000000;在16位字长中,-0为1 0000000 00000000,而+0为0 0000000 00000000。所以在二进制的机器数中,0也有两个(-0和0),且表示形式并不一样。

    (二)二进制表示形式

    1、原码

    (1)概念

    • 最高位为符号位,其余为真值部分
    • [ X ] 原 = 符 号 位 + ∣ 绝 对 值 ∣ [X]_原=符号位+|绝对值| [X]=+

    (2)优点

    • 真值和其原码表示之间的对应关系简单,容易理解

    (3)缺点

    • 计算机中用原码进行加减运算比较困难
    • 0的表示不唯一

    (4)数0的原码

    8位数0的原码:

    • + 0 = 0 0000000 +0 = \colorbox{Yellow}00000000 +0=00000000
    • − 0 = 1 0000000 -0 = \colorbox{Yellow}10000000 0=10000000

    由此可见,数0的原码不唯一。

    2、反码

    (1)概念

    对一个机器数X:

    • X > 0 X>0 X>0 ,则 [ X ] 反 = [ X ] 原 [X]_反=[X]_原 [X]=[X]
    • X < 0 X<0 X<0, 则 [ X ] 反 = 对 应 原 码 的 符 号 位 不 变 , 数 值 部 分 按 位 求 反 [X]_反=对应原码的符号位不变,数值部分按位求反 [X]=

    (2)案例

    例1、-52的反码

    X = − 52 = − 0110100 X = -52 = -0110100 X=52=0110100

    • [ X ] 原 = 1 0110100 [X]_原=\colorbox{yellow}10110100 [X]=10110100
    • [ X ] 反 = 1 1001011 [X]_反=\colorbox{yellow}11001011 [X]=11001011
    例2、0的反码
    • [ + 0 ] 反 = [ + 0 ] 原 = 0 0000000 [+0]_反= [+0]_原= \colorbox{yellow}00000000 [+0]=[+0]=00000000
    • [ − 0 ] 原 = 1 0000000 [-0]_原= \colorbox{yellow}10000000 [0]=10000000
    • [ − 0 ] 反 = 1 1111111 [-0]_反 = \colorbox{yellow}11111111 [0]=11111111

    由此可见,数0的反码也不是唯一的。

    3、补码

    (1)概念

    对于机器数X:

    • 若 X > 0 , 则 [ X ] 补 = [ X ] 反 = [ X ] 原 若X>0, 则[X]_补= [X]_反= [X]_原 X>0[X]=[X]=[X]
    • 若 X < 0 , 则 [ X ] 补 = [ X ] 反 + 1 若X<0, 则[X]_补= [X]_反+1 X<0[X]=[X]+1

    (2)案例

    例1、-52的补码

    X = – 52 = – 0110100 X= – 52= – 0110100 X=52=0110100

    • [ X ] 原 = 1 0110100 [X]_原=\colorbox{yellow}10110100 [X]=10110100
    • [ X ] 反 = 1 1001011 [X]_反=\colorbox{yellow}11001011 [X]=11001011
    • [ X ] 补 = [ X ] 反 + 1 = 1 1001100 [X]_补= [X]_反+1=\colorbox{yellow}11001100 [X]=[X]+1=11001100
    例2、0的补码
    • [ + 0 ] 补 = [ + 0 ] 原 = 0 0000000 [+0]_补= [+0]_原=\colorbox{yellow}00000000 [+0]=[+0]=00000000
    • [ − 0 ] 补 = [ − 0 ] 反 + 1 = 1 1111111 + 1 = 1 0 0000000 = 0 0000000 [-0]补= [-0]_反+1=\colorbox{yellow}11111111+1 =\colorbox{red}1\colorbox{yellow}00000000=\colorbox{yellow}00000000 [0]=[0]+1=11111111+1=100000000=00000000
    • 说明:对8位字长,进位(红色1)被舍掉
    例3、钟表案例 - 将指针从5点拨到1点

    两钟拨法:

    • 逆时钟拨: 5 − 4 = 1 5 - 4 = 1 54=1
    • 顺时钟拨: 5 + 8 = 13 = 12 + 1 = 1 5 + 8 = 13= \colorbox{red}{12} + 1 = 1 5+8=13=12+1=1 12 12 12为模,自动丢失)

    对模12,减法变加法

    • [ − 4 ] 补 = 12 − 4 = 8 [-4]_补=12-4=8 [4]=124=8 8 8 8 − 4 -4 4的补数)
    • 5 − 4 = 5 + 8 5-4=5+8 54=5+8
    • 5 − 4 = 5 + ( − 4 ) = 5 + ( 12 − 4 ) = 5 + 8 = 12 + 1 = 1 5-4=5+(-4)=5+(12-4)=5+8=\colorbox{red}{12} +1=1 54=5+(4)=5+(124)=5+8=12+1=1

    (3)补码的算术运算

    通过引进补码,可将减法运算转换为加法运算。

    • [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X+Y]_补=[X]_补+[Y]_补 [X+Y]=[X]+[Y]
    • [ X − Y ] 补 = [ X + ( − Y ) ] 补 = [ X ] 补 + [ − Y ] 补 [X-Y]_补=[X+(-Y)]_补 =[X]_补+[-Y]_补 [XY]=[X+(Y)]=[X]+[Y]
    例1、计算66-51

    66 − 51 = 66 + ( − 51 ) = 15 66-51=66+(-51)=15 6651=66+(51)=15
    用二进制补码运算:

    • [ + 66 ] 补 = [ + 66 ] 原 = 0 1000010 [+66]_补= [+66]_原= \colorbox{yellow}01000010 [+66]=[+66]=01000010
    • [ − 51 ] 原 = 1 0110011 [-51]_原=\colorbox{yellow}10110011 [51]=10110011
    • [ − 51 ] 补 = 1 1001101 [-51]_补=\colorbox{yellow}11001101 [51]=11001101
    • [ 66 − 51 ] 补 = [ + 66 ] 补 + [ − 51 ] 补 = 1 0 0001111 = 0 0001111 = 15 [66-51]_补=[+66]补+ [-51]补= \colorbox{red}1\colorbox{yellow}00001111=\colorbox{yellow}00001111=15 [6651]=[+66]+[51]=100001111=00001111=15
    例2、X = -52 = -0110100,Y = 116 = +1110100,求X + Y的值
    • [ X ] 原 = 1 0110100 [X]_原=\colorbox{yellow}10110100 [X]=10110100
    • [ X ] 补 = [ X ] 反 + 1 = 1 1001100 [X]_补= [X]_反+1=\colorbox{yellow}11001100 [X]=[X]+1=11001100
    • [ Y ] 补 = [ Y ] 原 = 0 1110100 [Y]_补= [Y]_原=\colorbox{yellow}01110100 [Y]=[Y]=01110100
    • [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 = 1 1001100 + 0 1110100 = 0 1000000 [X+Y]_补= [X]_补+ [Y]_补=\colorbox{yellow}11001100+\colorbox{yellow}01110100=\colorbox{yellow}01000000 [X+Y]=[X]+[Y]=11001100+01110100=01000000
    • 最高位是0,说明是正数,补码等于原码,即符号位+真值

    ∴ X + Y = [ X + Y ] 补 = 0 1000000 = + 1000000 = 64 \therefore X+Y=[X+Y]_补=\colorbox{yellow}01000000=\colorbox{yellow}+1000000=64 X+Y=[X+Y]=01000000=+1000000=64

    例3、X = 34 = +0100010,Y = -52 = -0110100,求X + Y的值
    • [ X ] 补 = [ X ] 原 = 0 0100010 [X]_补=[X]_原=\colorbox{yellow}00100010 [X]=[X]=00100010
    • [ Y ] 原 = 1 0110100 [Y]_原=\colorbox{yellow}10110100 [Y]=10110100
    • [ Y ] 补 = [ Y ] 反 + 1 = 1 1001011 + 1 = 1 1001100 [Y]_补=[Y]_反+1=\colorbox{yellow}11001011+1=\colorbox{yellow}11001100 [Y]=[Y]+1=11001011+1=11001100
    • [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 = 0 0100010 + 1 1001100 = 1 1101110 [X+Y]_补= [X]_补+ [Y]_补=\colorbox{yellow}00100010+\colorbox{yellow}11001100=\colorbox{yellow}11101110 [X+Y]=[X]+[Y]=00100010+11001100=11101110
    • 最高位是1,说明是负数,补码不等于原码,补码不是符号位+真值

    ∴ X + Y = [ [ X + Y ] 补 ] 补 = [ 1 1101110 ] 补 = [ 1 1101110 ] 反 + 1 = 1 0010001 + 1 = 1 0010010 = − 18 \therefore X+Y=[[X+Y]_补]_补=[\colorbox{yellow}11101110]_补=[\colorbox{yellow}11101110]_反+1=\colorbox{yellow}10010001+1=\colorbox{yellow}10010010=-18 X+Y=[[X+Y]]=[11101110]=[11101110]+1=10010001+1=10010010=18

    (4)编译系统将负数转换成补码

    • 现代计算机系统中,程序设计时,负数可用“-”表示,由编译系统将其转换为补码。
    • 案例演示:若输入数 = − 3 = -3 =3,程序编译后的值 = F D H =FDH =FDH
    • X = − 3 = − 0000011 X = -3 = -0000011 X=3=0000011
    • [ X ] 原 = 1 0000011 [X]_原=\colorbox{yellow}10000011 [X]=10000011
    • [ X ] 补 = [ X ] 反 + 1 = 1 1111100 + 1 = 11111101 = F D H [X]_补=[X]_反+1=\colorbox{yellow}11111100+1=11111101=FDH [X]=[X]+1=11111100+1=11111101=FDH

    (5)特殊数10000000

    • 对无符号数: ( 10000000 ) B = 128 (10000000)_B=128 (10000000)B=128
    • 在原码中定义为: ( 10000000 ) B = − 0 (10000000)_B=-0 (10000000)B=0
    • 在反码中定义为: ( 10000000 ) B = − 127 (10000000)_B= -127 (10000000)B=127
    • 在补码中定义为: ( 10000000 ) B = − 128 (10000000)_B= -128 (10000000)B=128

    三、计算机能力的局限性

    (一)计算机的运算能力是有限的

    • 计算机无力解决无法设计出算法的问题
    • 无法处理无穷运算或连续变化的信息

    (二)计算机能够表示的数(表数)的范围是有限的

    • 计算机的表数范围受字长的限制

    • 对8位机而言
      – 无符号数的最大值: 11111111 1111 1111 11111111
      – 有符号正数的最大值: 0 1111111 \colorbox{yellow}0111 1111 01111111

    • 当运算结果超出计算机表数范围时,将产生溢出

    1、无符号整数的表示范围

    • 当计算机中数的运行结果超出表数范围时,则产生溢出。
    • 无符号整数的表数范围: 0 ≤ X ≤ 2 n − 1 0 ≤ X ≤ 2^n-1 0X2n1 n n n表示字长)
    • 无符号数加减运算溢出的判断方法:当最高位向更高位有进位(或借位)时则产生溢出。
      在这里插入图片描述

    2、有符号整数的表示范围

    (1)原码和反码

    • − ( 2 n − 1 − 1 ) ≤ X ≤ 2 n − 1 − 1 -(2^{n-1} -1) ≤ X ≤ 2^{n-1} -1 (2n11)X2n11

    (2)补码

    • − 2 n − 1 ≤ X ≤ 2 n − 1 − 1 -2^{n -1}≤ X ≤ 2^{n-1} -1 2n1X2n11

    (3)对8位二进制数

    • 原码: − 127 ~ + 127 -127 ~+127 127+127
    • 反码: - 127 ~ + 127 127 ~+127 127+127
    • 补码: − 128 ~ + 127 -128 ~+127 128+127

    (4)符号数运算中的溢出判断

    • 两个有符号二进制数相加或相减时,若运算结果超出可表达范围,则产生溢出

    • 溢出的判断方法:最高位进位状态 ⨁ \bigoplus 次高位进位状态=1,则结果溢出。

    • 例:最高位进位状态与次高位进位状态不同就会溢出
      在这里插入图片描述

    • 除法运算溢出时,产生"除数为0"中断

    • 乘法运算无溢出问题

    四、符号二进制数与十进制的转换

    (一)转换方法

    1. 求出真值
    2. 进行转换

    (二)计算机中的符号数默认以补码形式表示

    • 原码=符号位+绝对值
    • 正数的补码=原码=符号位+绝对值
    • 负数的补码≠原码 ⟹ \Longrightarrow 负数的补码≠符号位+绝对值

    (三)补码数转换为十进制数

    1、对正数

    • 补码=反码=原码,且原码=符号位+真值 ⟹ \Longrightarrow 正数补码的数值部分为真值

    2、对负数

    • 补码≠反码≠ 原码 ⟹ \Longrightarrow 负数补码的数值部分≠真值

    3、案例演示

    (1)补码最高位是0的情况

    • 假设 [ X ] 补 = 0 010111 0 B [X]_补=\colorbox{yellow}00101110_B [X]=00101110B
      符号位是0,说明是正数,补码=原码=符号位+真值
      因此,真值 = + 010111 0 B ⟹ X = + 10111 0 B = + 46 =\colorbox{yellow}+0101110_B \Longrightarrow X=\colorbox{yellow}+101110_B=\colorbox{yellow}+46 =+0101110BX=+101110B=+46

    (2)补码最高位是1的情况

    • 假设 [ X ] 补 = 1 101001 0 B [X]_补=\colorbox{yellow}11010010_B [X]=11010010B
    • 符号位是1,说明是负数, X ≠ - 101001 0 B X≠\colorbox{yellow}-1010010_B X=-1010010B
    • 欲求 X X X真值,需对 [ X ] 补 [X]_补 [X]再取补
    • X = [ [ X ] 补 ] 补 = [ 1 101001 0 B ] 补 = [ 1 101001 0 B ] 反 + 1 = 1 010110 1 B + 1 = 1 010111 0 B = - 010111 0 B = - 46 X=[[X]_补]_补=[\colorbox{yellow}11010010_B]_补=[\colorbox{yellow}11010010_B]_反+1=\colorbox{yellow}10101101_B+1=\colorbox{yellow}10101110_B=\colorbox{yellow}- 0101110_B = \colorbox{yellow}- 46 X=[[X]]=[11010010B]=[11010010B]+1=10101101B+1=10101110B=-0101110B=-46
    展开全文
  • C++实现读入二进制数并转换为十进制输出题目描述已知个只包含0和1二进制数,长度不大于10,将其转换为十进制并输出。输入描述输入二进制整数n,其长度不大于10输出描述输出转换后的十进制,占行样例输入...

    C++实现读入二进制数并转换为十进制输出

    题目描述

    已知一个只包含0和1的二进制数,长度不大于10,将其转换为十进制并输出。

    输入描述

    输入一个二进制整数n,其长度不大于10

    输出描述

    输出转换后的十进制数,占一行

    样例输入

    110

    样例输出

    6

    solution:

    很多学过C初学C++的人可能想到的是用字符数组形式读入再一位一位计算成十进制输出。

    没必要。

    C++类库提供了二进制数据类,并且可以用其方法转换成十进制。

    代码如下:

    复制代码 代码如下:

    #include

    using namespace std;

    #include

    int main()

    {

    bitset<16> bint;  // 16 bit 二进制数据,还有 bitset<32>

    cin >> bint;

    cout << bint.to_ulong() << endl;

    return 0;

    }

    时间: 2015-03-15

    6b5aa0751a6f1e6a9d0b665a02cc1f46.gif

    题目内容:将十进制整数转换成二进制数. 输入描述:输入数据中含有不多于50个的整数n(-231",再然后输出二进制数.每个整数n的输出,独立占一行. 题目分析:将某个数从十进制转为二进制的具体方法是,该数对2取余,结果要么为1要么为0,此为该数对应二进制的末位:然后该数除以二,得到的商再次对2取余,结果为对应二进制的倒数第二位--以此类推,知道除以2的结果为0. 参考代码: 复制代码

    看第二节的时候,它是定义的一个整型,然后取位.但是他的那个或运算符号好像写错了,写成了异或符号"^",应该是"|".我就突然对二进制的输出感兴趣了.想知道怎样输出二进制.我们知道C++输出十六进制是cout〈〈hex〈〈 a:而八进制是cout〈〈 ocx〈〈 a;二进制则没有默认的输出格式,需要自己写函数进行转换,于是上网搜索了一下.网上思路真是广泛啊. 下面列出一些方法.  #include 〈iostream〉 #include 〈li

    本文实例讲述了C++实现十六进制字符串转换为十进制整数的方法.分享给大家供大家参考.具体实现方法如下: /* * 将十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值 */ #include #include /* 将十六进制中的字符装换为对应的整数 */ int hexchtoi(char hexch ) { char phexch[] = "ABCDEF"; char qhexch[] = &qu

    本文实例讲述了C++实现string存取二进制数据的方法,分享给大家供大家参考.具体方法分析如下: 一般来说,STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的朋友可以看下. 在数据传输中,二进制数据的buffer一般用系统预设的大数组进行存储,而不是STL的s

    前言 在进行 i18n 相关的开发时,经常遇到字符编码转换的错误.这时如果能把相关字符串用十六进制的形式打印出来,例如,"abc" 输出成 "\\x61\\x62\\x63" 这对于 i18n 的除错来说是很有帮助的.Python 里面,只需要使用 repr() 函数就行了.可在 C++ 中如何做到这点呢? 下面是用 ostream 的格式化功能的一个简单的实现: std::string get_raw_string(std::string const& s

    6b5aa0751a6f1e6a9d0b665a02cc1f46.gif

    1.为什么有这种需求 因为有些情况需要避免出现乱码.不管什么编码都是二进制的,这样表示为16进制就可以啦. 2.如何读取16进制文件 最近编程用这一问题,网上查了一下,感觉还是自己写吧. 16进制数据一般是:text=0x340xb5...,就是0x开头,之后是两个数字十六进制数. 如果直接使用sscanf(text,"0x",&num),会把连续的数字读进去直到遇到'x'. 如使用sscanf读取text第一个读到的十六进制数是0x340,误判啦.最后,因为是4个一组,就先把

    6b5aa0751a6f1e6a9d0b665a02cc1f46.gif

    二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件. 对二进制文件的操作也需要先打开文件,用完后要关闭文件.在打开时要用ios::binary指定为以二进制形式传送和存储.二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件.这是和ASCII文件不同的地方. 用成员函数read和write读写二进制文件 对二进制文件的读写主

    c++实现十进制转换成16进制 复制代码 代码如下: //Decimal to hexadecimal number//programming by : Erfan Nasoori//Date of send : 2009/1/11 #include void main(){ int x,y,i; int d,n=1; int * r; char h[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D

    本文实例讲述了C++实现数字转换为十六进制字符串的方法.分享给大家供大家参考.具体如下: function toHex(number, min) { var hexes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; var hex = ''; var min = min || 2; var nibble; do { nibble = number & 0x0f; number

    6b5aa0751a6f1e6a9d0b665a02cc1f46.gif

    C++ 基础编程之十进制转换为任意进制及操作符重载 最近学习C++ 的基础知识,完成十进制转换为任意进制及操作符重载,在网上找的不错的资料,这里记录下, 实例代码: #include #include #include using namespace std; using std::iterator; /// ///十进制转换为任意进制,为了熟悉操作符,也加了操作符重载. ///包括自增(

    进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最后再将负号补回来,我认为这种做法是不对的. 正确的做法是:考虑好按照16位(short)还是32位(int)抑或64位(long long),先求出二进制补码(这时候就正负数就统一了),将二进制数转换为十进制后在转换为其他进制(如果有小伙伴知道如何直接将二进制转换为任意进制的方法可以留言告诉我,不胜

    16进制的字符串 转换为整数 function hex2int(hex) {     var len = hex.length, a = new Array(len), code;     for (var i = 0; i < len; i++) {         code = hex.charCodeAt(i);         if (48<=code && code < 58) {             code -= 48;         } else {

    前言 最近因为工作的需要,需要写个短链服务,用到了10->62进制,网上找了一个,可以转换最多76位进制的博客,现在分享出来,下面话不多说了,来一起看看详细的介绍吧. 压缩数据用,无损压缩 示例代码: package main import ( "fmt" "math" "strconv" "strings" ) var tenToAny map[int]string = map[int]string{0: "

    本文实例讲述了php实现将任意进制数转换成10进制的方法.分享给大家供大家参考.具体如下: php将任意进制的数转换成10进制,例如8进制转换成10进制,16进制转换成10进制 <?php # Show the steps involved in converting a number # from any base (like octal or hex) to base 10 # See below for examples, instructions and copyright functi

    之前不知道php自带有base_convert可以实现任意进制之间的转换,自己写了一个.... <?php /** * 进制转换类 * @author sgf@funcity * @version 2011-02-15 */ Class Hex{ private static $element = array( '0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F','G','H','I','J', 'K','L','M'

    废话不多说,直接上代码 #include #include #include using namespace std; int main() { //十进制转换为若干进制>2,<16 = int num; int n;//2-16之间 int a; int i=0; cin>>num>>n; int s[100]; if(n>=2&&n<<16

    使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x) Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns

    1.二进制数.八进制数.十六进制数转十进制数 有一个公式:二进制数.八进制数.十六进制数的各位数字分别乖以各自的基数的(N-1)次方,其和相加之和便是相应的十进制数.个位,N=1;十位,N=2...举例: 110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D 110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D 110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D 2.十进制数转二进制数.八进制数.十六进制

    代码很简单,功能也很简单,这里就不多废话了 #include int main() { char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int zh[32],i=0,w,j; long int b,y; printf("请输入一个十进制数,我能帮您把它转换成2~16任意进制数:\n"); scanf("%d",&y);

    展开全文
  • 程序中,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表现的。也就是说,只要掌握了使用二进制数表示信息的方法及其运算机制,也就自然能够了解程序的运行机制了。那么,为什么计算机处理的信息...

    详解计算机内部存储数据的形式—二进制数

    前言

    要想对程序的运行机制形成一个大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来表现的,又是以怎样的方法进行运算的。在 C 和 Java 等高级语言编写的
    程序中,数值、字符串和图像等信息在计算机内部都是以二进制数值的形式来表现的。也就是说,只要掌握了使用二进制数来表示信息的方法及其运算机制,也就自然能够了解程序的运行机制了。那么,为什么计算机处理的信息要用二进制数来表示呢?

    一、用二进制数表示计算机信息的原因

    计算机内部是由  IC(集成电路( Integrated Circuit) )这种电子部件构成的。 CPU( 微处理器) 和内存也是 IC 的一种。IC 有几种不同的形状,有的像一条黑色蜈蚣, 在其两侧有数个乃至数百个引脚; 有的则像插花用的针盘, 引脚在 IC 内部并排排列着。== IC 的所有引脚, 只有直流电压0V 或 5VB 两个状态==。 也就是说, IC 的一个引脚, 只能表示两个状态。IC 的这个特性, 决定了计算机的信息数据只能用二进制数来处理。

    • 计算机处理信息的最小单位——, 就相当于二进制中的一位。 位的英文 bit 是二进制数位( binary digit) 的缩写。
    • 8 位二进制数被称为一个字节
    • 位是最小单位,字节是==(信息的)基本单位==。
    • 用字节单位处理数据时, 如果数字小于存储数据的字节数(二进制数的位数), 那么高位上就用 0 填补。 例如, 100111 这个 6 位二进制数, 用 8 位( =1 字节) 表示时为 00100111, 用 16 位( = 2 字节) 表示时为 0000000000100111。

    二、什么是二进制数

    • 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”
    • 二进制数的值转换成十进制数的值, 只需将二进制数的各数位的值和位权相乘,
      然后将相乘的结果相加即可。例如00100111转为十进制数是39
      在这里插入图片描述
      为什么这样计算呢?其实二进制和十进制的思想是一致的,比如十进制数39=(3 x 101) +(9 x 100),其中幂函数中10是基数, 这里和各个数位的数值相乘的 10 和
      1, 就是位权。二进制和十进制计算方式就是基数不同而已。

    三、移位运算和乘除运算的关系

    • 移位运算指的是将二进制数值的各数位进行左右移位( shift = 移位) 的运算。 移位有左移( 向高位方向)和右移( 向低位方向) 两种。 在一次运算中, 可以进行多个数位的移位操作。
    • << 这个运算符表示左移, 右移时使用 >> 运算符。 << 运算符和 >> 运算符的左侧是被移位的值, 右侧表示要移位的位数。
    • 左移后空出来的低位要进行补0 操作
    • 移位操作使最高位或最低位溢出的数字, 直接丢弃就可以了。例如十进制数 39 用 8 位的二进制表示是 00100111, 左移两位后是 10011100, 再转换成十进制数就是 156。
      在这里插入图片描述
    • 移位运算也可以通过数位移动来代替乘法运算和除法运算。左移两位后数值变成
      了原来的 4 倍。 十进制数左移后会变成原来的 10 倍、 100 倍、 1000 倍……同样,二进制数左移后就会变成原来的 2 倍、 4 倍、 8倍 …… 反之, 二进制数右移后则会变成原来的1/2、1/4、1/8…

    四、表示负数的“补数”

    • 二进制数中表示负数值时, 一般会把最高位作为符号来使用, 因此我们把这个最高位称为符号位。符号位是 0 时表示正数 , 符号位是1 时表示负数。
    • 那么-1 用 8 位二进制数来表示的话是什么样的呢? 可能很多人会认为“1 的二进制数是 00000001, 因此-1 就是 10000001”,但这个答案是错的, 正确答案是 11111111。
    • 计算机在做减法运算时, 实际上内部是在做加法运算。 用加法运算来实现减法运算, 为此, 在表示负数时就需要使用“二进制的补数”。补数就是用正数来表示负数
    • 补数如何获得? 只需要将二进制数的各数位的数值全部取反 ,然后再将结果加 1
    • 用 8 位二进制数表示- 1 时, 只需求得 1,也就是 00000001 的补数即可。 具体来说, 就是将各数位的 0 取反成 1,1 取反成 0, 然后再将取反的结果加 1, 最后就转化成了 11111111
      在这里插入图片描述
      在这里插入图片描述
      那么,对于一个补数,如何知道它所代表的负数值是多少呢?这时我们可以利用负负得正这个性质。补数代表一个负数,那么补数的补数代表一个正数,这个正数取负就是这个补数的值。如 11111110,最高位是1,因此代表一个负数,11111110取反再加1为00000010。 这个是 2 的十进制数。 因此,11111110 表示的就是-2。

    五、逻辑右移和算术右移的区别

    • 当二进制数的值表示图形模式而非数值时,== 移位后需要在最高位补 0==。 类似于霓虹灯往右滚动的效果。 这就称为逻辑右移

    • 将二进制数作为带符号的数值进行运算时, 移位后要在最高位填充移位前符号位的值( 0 或 1)。 这就称为算术右移。即如果数值是用补数表示的负数值, 那么右移后在空出来的最高位补 1, 就可以正确地实现 1/2、 1/4、 1/8 等的数值运算。 如果是正数, 只需在最高位补 0即可。
      在这里插入图片描述

    • 只有在右移时才必须区分逻辑位移和算术位移。 左移时, 无论是图形模式( 逻辑左移) 还是相乘运算( 算术左移), 都只需在空出来的低位补 0 即可。

    • 符号扩充就是指在保持值不变的前提下将其转换成 16 位和 32 位的二进制数。

    • 符号扩充的方法:不管是正数还是用补数表示的负数, 都只需用符号位的值( 0 或者 1) 填充高位即可。如01111111 这个正的 8 位二进制数转换成 16 位二进制数是 0000000001111111 ; 11111111这个用补数表示的负数转换成 16 位二进制数是1111111111111111
      在这里插入图片描述

    • 在运算中, 与逻辑相对的术语是算术。 我们不妨这样考虑, 将二进制数表示的信息作为四则运算的数值来处理就是算术。 而像图形模式那样, 将数值处理为单纯的 0和 1 的罗列就是逻辑

    • 算术运算是指加减乘除四则运算。

    • 逻辑运算是指对二进制数各数字位的 0 和 1分别进行处理的运算, 包括逻辑非( NOT 运算)、 逻辑与( AND 运算)、 逻辑或( OR 运算) 和逻辑异或( XOR 运算 A) 四种。

    • 逻辑非指的是 0 变成 1、 1 变成 0 的取反操作。

    • 逻辑与指的是“两个都是 1” 时, 运算结果为 1, 其他情况下运算结果都为 0 的运算

    • 逻辑或指的是“至少有一方是 1” 时, 运算结果为 1, 其他情况下运算结果都是 0 的运算。

    • 逻辑异或指的是排斥相同数值的运算。“两个数值不同”, 也就是说, 当“其中一方是 1, 另一方是 0” 时运算结果是 1, 其他情况下结果都是 0。

    • 逻辑真值表如下
      在这里插入图片描述

    展开全文
  • 在这种情况下,输入输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用二进制补码记法来表示有符号整数。...
  • 二进制如何转换为十进制?

    千次阅读 2021-06-19 05:54:00
    二进制到十进制数字转换使用加权列来标识数字的顺序以确定数字的最终值将二进制转换为十进制(base-2到base-10) )数字背面是个重要的概念,因为二进制编号系统构成了所有计算机数字系统的基础。十进制或...
  • 详解计算机内部存储数据的形式—二进制数 前言 要想对程序的运行机制形成个大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来...、用二进制数表示计算机信息的原因 计算机内部是由  IC(集成电路( Int
  • 计算机为什么使用二进制

    千次阅读 2021-07-27 09:11:46
    计算机为什么使用二进制2018-09-23计算机为什么采用二进制编码电子计算机所采用的是二进制!为什么不采用十进制呢?这是很多初学者感到困惑的地方。我们从几个方面来分析这个问题。首先是受制于元器件。我们知道组成...
  • 二进制数据是用0和1两个数码来表示。它的基数为2,进位规则是“逢二进”,借位规则是“借当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是...
  • http://kaito-kidd.com/2018/08/14/decimal-expression/我们知道计算机中数字都是使用的二进制表示和运算,对于我们熟悉的十进制数字,可以通过数值进制公式进行转换后计算显示。但除了这种编码方式之外,计算机...
  • 2、串口自定义协议接收一串十六进制数据进行存储,并将其中的两个字节转化为十进制数据 3、串口助手发送字符控制LED的亮灭 4、发送一个字节函数 5、发送两个字节函数 6、重定向printfgetchar函数
  • 文本文件和二进制文件的区别

    千次阅读 2020-12-18 12:53:05
    定义广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名。狭义的二进制文件即除文本文件以外的文件。文本文件是种由很多行字符构成的计算机文件。文本文件存在于计算机系统中,通常在文本文件...
  • 位第n位的(01)乘以2的n次方得到的结果相加就是答案例如: 01101011转十进制:第0位:1乘2的0次方=11乘2的1次方=20乘2的2次方=01乘2的3次方=80乘2的4次方=01乘2的5次方=321乘2的6次方=640乘2的7次方=0然后:1...
  • 二进制编码-详细讲解

    千次阅读 2021-07-28 07:48:17
    负数:原码就是原来的表示方法反码是除符号位(最高位)外取反补码=反码+1以前学习二进制编码时,老师讲了堆堆的什么原码啊反码啊补码啊xxxx转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了种比较好...
  • 二进制基础及位运算

    千次阅读 2019-12-04 16:06:09
    二进制计算 每位上的基数的索引次幂相加之 例如:0101=12º+12²=5 第1基数2的索引0次幂+第三位1*基数2的2次幂等于5 其他进制计算等同 十进制转2进制:除2求余法 除2求余倒序表示 简便算法:记住2的10次...
  • 二进制及其单位换算

    千次阅读 2021-05-23 23:07:16
    概述:二进制数据是用0和1两个数码来表示。它的基数为2,进位规则是“逢二进”,借位规则是“借当二”。 计算机中的存储容量单位 位:bit,简称b,存放二进制数,即0或者1,bit是存储信息最小的单位。...
  • MySQL字符串和二进制

    万次阅读 2017-05-28 15:36:30
    为了存储字符、图片声音等数据,MySQL提供了字符串和二进制类型。数据类型CHAR——用于表示固定长度的字符 VARCHAR——用于表示可变长度的字符 BINARY——用于表示固定长度的二进制数据 VARBINARY——...
  • bcd码和二进制码有什么区别

    千次阅读 2021-07-26 01:06:10
    描述二进制是由1和0两个数字组成的,它可以表示两种状态,即开和关。所有输入电脑的任何信息最终都要转化为二进制。目前通用的是ASCII码。最基本的单位为bit。二进制编码是用预先规定的方法将文字、数字或其他对象编...
  • ## 二进制、八进制、十进制、十六进制【扩展内容】### 1.1 进制二进制:逢二进,数值只有0和1。八进制:逢八进,数值有0,1,2,3,4,5,6,7十进制:逢十进,数值有0,1,2,3,4,5,6,7,8,9十六进制:逢十六进,...
  • 再用2去除商,又会得到个商余数,如此进行,直到商为小于1时为止,然后依次翻转排序即可得到二进制数,在Python中我们采”//”(地板除)的方法实现转换 # 十...相关推荐2019-12-08 11:59 −1、给定个由整数...
  • 个字节由几个二进制位组成

    千次阅读 2021-07-03 05:36:14
    聊到几个,我们许多人都...个字节由几个二进制位构成字节是以二进制盘算的,包含八位的二进制数个字节通常8位长,但是,一些老型号计算机布局使用不同的长度。为了避免杂乱,在大多数国际文献中,利用词代替b...
  • 在计算机安全与黑客攻防领域,CTF挑战经常以竞赛形式进行,目标是分析并利用指定的二进制文件,或者正在运行的进程/服务器,直至拿到隐藏在二进制文件中的“flag”为止。flag一般是十六进制的字符,你可以用它来...
  • 一文了解二进制和CPU工作原理

    千次阅读 2020-06-03 11:45:00
    Part 1. 原来,我们是这样记数的“本节内容节选自下方 参考资料 1在讨论「二进制「CPU 如何工作」之前,我们先来讨论一下我们生活中最稀疏平常的 数字,我们与之频繁地打交道:...
  • 彻底明白各进制数之间的转换

    千次阅读 2020-11-29 18:16:43
    二进制数据是用0和1两个数码来表示。它的基数为2,进位规则是“逢二进”,借位规则是“借当二”。现代的计算机依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit的缩写)。 1 ~ 9...
  • 二进制加法Java实现

    千次阅读 2021-02-12 22:57:33
    它们是:0+0=01+0=0+1=11+1=10=0+向高位的进位11+1+1=11=1+向高位的进位1//整数二进制相加public static String add(String b1, String b2) {int len1 = b1.length();int len2 = b2.length();S...
  • 在计算机语言中,所有指令,数据都用一串二进制0和1表示,这种语言称为什么? 机器语言。机器语言是用二进制代码表示的计算机能直接识别执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予...
  • 小编典典转换BigInteger为十进制,十六进制,二进制,八进制字符:让我们从个BigInteger值开始:BigInteger bigint = BigInteger.Parse("123456789012345678901234567890");基地10基地16内置的Base 10(十进制)...
  • 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 ...
  • 文本文件和二进制文件的差异区别

    万次阅读 多人点赞 2018-05-16 11:11:20
    广义上的二进制文件包括文本文件,这里讨论的是狭义上的二进制文件与文本文件的比较: 能存储的数据类型不同 文本文件只能存储char型字符变量。二进制文件可以存储char/int/short/long/float/……各种变量值。 每...
  • 计算机组成原理--二进制编码

    千次阅读 2021-07-16 00:58:42
    算是读书笔记吧二进制编码二进制和我们平时用的十进制,其实并没有什么本质区别,只是平时我们是“逢十进”,这里变成了“逢二... 0×2³+0×2²+1×2¹+1×2⁰ = 3十进制转二进制用2做短除法因此13这个十进制,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 185,887
精华内容 74,354
关键字:

一串二进制数0和1表示称为