精华内容
下载资源
问答
  • 二进制符号解释

    千次阅读 2019-09-28 16:49:17
    一:二进制运算符 &:且:都为1才为真 例:A&B A=12 B=3 A&B=1100&0011=0000 |:或:有一个为1就为真 例:A|B A=12 B=3 A|B=1100|0011=1111 ^:异或:一个为0另一个为1---两个不相同为真 例:...

    一:二进制运算符

    &:且:都为1才为真

    例:A&B    A=12    B=3

    A&B=1100&0011=0000

    |:或:有一个为1就为真

    例:A|B    A=12    B=3

    A|B=1100|0011=1111

    ^:异或:一个为0另一个为1---两个不相同为真

    例:A^B    A=12    B=3

    A^B=1100^0011=1111

    ~:取反   将0转化为1,将1转化为0

    例:~A   A=12

    ~A=0011

    二:二进制运算符的应用

    1)n&(n-1)

    (1)可以知道n转化为二进制有几个1---求某一个数的二进制表示中1的个数

    while(n>0){
        count++;
        n=n&(n-1);
    }

    (2)判断一个数是否是2的方幂

    if(n>0&&((n&(n-1))==0))
    cout<<"该数是2的方幂"<<endl;

    (2)计算N!的质因数2的个数

    容易得出N!质因数2的个数 = [N / 2] + [N / 4] + [N / 8] + …
    下面通过一个简单的例子来推导一下过程:N = 10101(二进制表示)
    现在我们跟踪最高位的1,不考虑其他位假定为0,
    则在
    [N / 2] 01000
    [N / 4] 00100
    [N / 8] 00010
    [N / 8] 00001
    则所有相加等于01111 = 10000 - 1
    由此推及其他位可得:(10101)!的质因数2的个数为10000 - 1 + 00100 - 1 + 00001 - 1 = 10101 - 3(二进制表示中1的个数)

    推及一般N!的质因数2的个数为N (N二进制表示中1的个数)

     

    2)n&(-n)

    在树状数组中lowbit出现 用来求 t 中的因子中形如2^k的数为多少 用来取得n最右边的1,可以知道其因子中有几个2

    10: 0000 1010

    -10: 1111 0110

    10&(-10)为 0010 = 2 所以10的因子中为2的有一个,2^k的形式的为 2^1

    8&(-8) = [1000] = 8 所以8的因子中为2的有3个,2^k的形式为2^3

     

    转载于:https://www.cnblogs.com/Aiahtwo/p/11407440.html

    展开全文
  • 二进制符号数的原码、反码、补码

    千次阅读 2020-02-21 15:52:21
    二进制符号数最左一位位符号位,0表示正,1表示负 2 二进制符号数的三种表现形式 2.1 符号数值形式 在符号数值形式下,正数和负数的数值位均为其原码,符号位0为正,1为负。 如:十进制 + 100 +100 + 1 0 0...

    说明:

    1. 本文内容是本人在学习数字电子技术课程时,于数字电子技术(第十版,Thomas L. Floyd 著)中总结出的笔记,与大家分享。本人是大二菜狗,文章难免有错误纰漏之处,欢迎大家批评指正。
    2. 在本文中二进制数均使用8位数字

    1 带符号二进制数

    二进制符号数最左一位位符号位,0表示正,1表示负

    2 二进制符号数的三种表现形式

    2.1 符号数值形式

    在符号数值形式下,正数和负数的数值位均为其原码,符号位0为正,1为负。

    如:十进制 + 100 +100 +100 用符号数值表示为 01100100 01100100 01100100

    − 100 -100 100 用符号数值表示为 11100100 11100100 11100100

    2.2 反码形式

    在反码形式下,正数与其符号数值形式相同,负数是其对应正数的反码。

    如:反码形式中,十进制 + 100 +100 +100 表示为 01100100 01100100 01100100

    − 100 -100 100 表示为 + 100 ( 01100100 ) +100(01100100) +100(01100100)的补码,即 10011100 10011100 10011100

    2.3 补码形式

    在补码形式下,正数与其符号数值形式和反码形式相同,负数是其对应正数的补码。

    3 带符号数的算术运算

    在计算机中负数均用补码形式表示,因为如果使用符号数值形式,在算术运算中会出现问题,如:

    20 − 15 20-15 2015 用符号表示是:

    ​    00010100 00010100 00010100

    + + +   10001111 10001111 10001111

    = = =   10100011 10100011 10100011

    结果为 − 35 -35 35,所以不能采用直接相加的方法计算,
    而对于补码形式

    ​      00010100 00010100 00010100

    + + +    11110001 11110001 11110001

    = = =   100000101 100000101 100000101 (进位舍弃)

    结果为 0000101 ( + 5 ) 0000101(+5) 0000101(+5),结果正确,可以直接利用加法器进行计算

    3.1 加法

    加法分为4种情况:

    1. 两个数均正

    2. 一正一负和为正

    3. 一正一负和为负

    4. 两个数均负

    前两种情况结果为二进制原码,后两种情况结果为补码形式的负数(舍去最后的任何进位)。请读者自行举例验证。

    个人理解: 可以将这四种情况都看做是补码加法,结果为补码。因为正数的补码是他本身,且有定理:两数补码之和等于两数之和的补码,证明见:关于“两数补码之和等于两数之和的补码”的证明

    注意:两数相加可能会发生溢出情况(两数均正或均负),此时我们通过引入变形补码的方式验证是否发生溢出。

    变形补码即用两个符号位来表示正负, 00 00 00 为正, 11 11 11 为负,数值位与补码形式相同,以 125 + 50 125+50 125+50 为例:

    ​    001111101 001111101 001111101

    + + +   000110010 000110010 000110010

    = = =   010101111 010101111 010101111

    最左边一位表示的是真实的符号: 00 + 00 = 0 x 00+00=0x 00+00=0x 11 + 11 = 1 x 11+11=1x 11+11=1x
    而左边第二位是计算出的补码的符号位,
    前两位符号位不同,则表示溢出。

    3.2 减法

    减法即取减数的补码后,将两数相加(舍去最后的任何进位)。

    3.3 乘法

    1. 直接加法在大多数计算机中,乘法是通过加法器完成的,即一个数加上其本身,相加次数为乘数。

    2. 部分积:

      1. 确定乘积的符号
      2. 将负数转变为原码的形式(因为大多数计算机以补码形式保存负数)
      3. 模仿竖式乘法的形式进行计算
      4. 如果符号为负,则取补码转换为补码形式,如果为正就保持原码

    3.4 除法

    计算机中的除法运算是通过减法完成的,通过加法器来完成(因为减法也是通过加法器完成的)

    基本过程:

    1. 确定除法的符号
    2. 将负数转变为原码的形式
    3. 使用补码加法将减数从被减数中除去,商加一
    4. 重复步骤二直至余数为0 或负,完成减法

    例:以 12 ÷ ( − 3 ) 12\div(-3) 12÷(3) 为例

    1. 结果为负

    2. − 3 -3 3 转换为原码 10000011 10000011 10000011

    3. 使用补码加法将 − 3 -3 3 12 12 12 中减去(即 00001100 00001100 00001100 − 3 -3 3 的补码 01111101 01111101 01111101

      共减了4次,结果分别为 10001001 10001001 10001001 00000110 00000110 00000110 10000011 10000011 10000011 00000000 00000000 00000000(舍去所有的最后进位)

    4. 商为 − 4 -4 4 ,转换为补码形式为 11111100 11111100 11111100

    展开全文
  • 上篇文章我们提到过在计算机中所有的文件底层的存储都是使用二进制的,右键点击一个文件然后点属性,我们可以看见该文件的大小,如:1.06 KB (1,094 字节)  这里我的文件大小为1094个字节,字节(byte)是电脑中的...

      上篇文章我们提到过在计算机中所有的文件底层的存储都是使用二进制的,右键点击一个文件然后点属性,我们可以看见该文件的大小,如:1.06 KB (1,094 字节)

      这里我的文件大小为1094个字节,字节(byte)是电脑中的最小计量单位,上面依此是千字节Kb、兆字节Mb、吉字节Gb……1024b=1Kb;1024Kb=1Mb;1024Mb=1Gb,但是不管多大,其都是由一个个二进制数组成的。

    那一个字节是由多少个二进制组成的呢?八位。

    也就是说假如我们玩一个字节的话,十进制的1对应的是二进制的00000001;

      1.符号位

    其中最高位是符号位,0表示这个数是正数,1表示这个数是负数,后面7位表示该数的值。

    也就是说 十进制的 3 对应二进制的数为:00000011,十进制的 -3 对应的二进制的数为:10000011

    最高位只表示符号位,只表示该数到底是正数还是负数,不参与进行数值计算

    那如果我们玩的是两个字节呢?那要表示十进制的-3,则是1000000 00000011

    只要记住最高位是符号位,最高位的0表示该数是正数,1表示该数是负数即可。

      2.原反补

      我们可以使用十进制进行算术计算,比如3+2 结果等于5; 9-3结果等于6,同样,我们也可以使用二进制进行算术计算。

    3+2的计算,我们先把十进制的3和十进制的2转成对应的2进制的数。分别是:

      00000011

      00000010

      相加算后可知(1+0等于1,1+1 等于10)结果为00000101,这是二进制的结果,我们把这个数转成十进制看看到底是不是5呢?

    2^2*1 + 2^1*0 + 2^0*1 = 5  上篇已经介绍过如果将二进制转成十进制,忘了的同学请自行翻到上篇回顾一下。

      这样看起来结果正确,那么我们再用二进制计算一下9-3

    9的二进制:00001001

    3的二进制:00000011

    一相减,发现结果等于00000110,验证一下发现没错,等于6.

    但是!计算机当中是没有减法的,只有加法。

    为什么没有减法只有加法呢?其实道理很简单,你想想假如让你制作一个机器,这个机器你制作成1个功能制作起来简单呢?还是做多个功能制作起来简单?不止是制作简单,还有功能多了是不是大小也不能那么精巧了?

    那,计算机里只有加法的话,我非要计算减法的话,要怎么算呢?

    其实,加法也可以实现,利用我们小学体育老师教导我们的数学知识得知,9-3可以转成9+(-3),这样就把减法转成了加法。

    9的二进制: 00001001

    -3的二进制:10000011

    相加后的结果为:10001100,这明显不是6嘛,骗人。

    是的,假如只有加法的话,那么直接使用二进制进行计算的话,是会导致结果出现问题,那么我们聪明的人类设计出了补码,只要用二进制的补码进行计算就没有问题。

    之前我们学的的是称作二进制的原码,那我们如何把二进制原码转成补码呢?使用反码,反码是原码通向补码的桥梁

    说了这么多抽象的文字,大家可能都晕了,没关系,看到下面的转换案例,马上清晰明了。

    1.正数的原码反码补码一致

       也就是说00111111 这样的正数,他的补码也是00111111

     2.负数

          

           2.1  负数的反码是符号位(最高位)不变,其他的0变1,1变0

           2.2  负数的补码是反码+1

        假如现在有个负数是 十进制的-27对应的二进制的原码为 10011011

            那么根据反码规则,最高位不变,还是1,其他位0变1,1变0,成为11100100

          最后,补码的规则是反码+1,也就是11100101

    会算了吗?如果不会的话,可以自己找几个数练习练习。

    那么回过头我们把之前的9-3再算算,这里补充个知识点,计算机中存储的都是二进制的补码,因为正数的原码反码补码一致,所以我们之前的计算拿原码拼命的计算也是一样的结果。但是我们心里得有个谱,计算是采用的补码。

    9的二进制原码: 00001001

    正数的原反补一致,所以

    9的二进制补码: 00001001

    -3的二进制原码:10000011

    -3的二进制反码: 11111100     (最高位不变,其他的0变1,1变0)

    -3的二进制补码: 11111101      (反码+1)

    那我们应该是把9的补码和-3的补码相加进行计算,

    9的二进制补码:  00001001

    -3的二进制补码: 11111101

    得到结果???不会算了?好像超了位数,没关系,你当做是水杯的只能装8L的水,但非要往里面倒9L的话,装不下的就装不下,只保留最后八位即可。

    我们算下得到结果是1 00000110 最左边的那位装不下,于是我们就截取了剩余00000110,验证下结果为6,没错。

    OK,到此我们已经掌握了符号位和原反补的知识,最后做几个练习巩固一下吧。

    练习1

    默认一个字节,使用二进制进行计算29-73,(友情提示:补码和补码计算出来的结果仍为补码)

     

    展开全文
  • 二进制表示 5+4 原码{ 5:0,101 4:0,100 0,101 +0,100 ———— 1,001 } {}括号里的仅仅是原码表示的5+4 5的原码是 0,101 最高位的0是符号位代表+号 4的原码是 0,100 最高位的0也是+号 二者相加,结果是:1...

    为什么计算机组成原理中1代表符号位中的负号!
    在这里举一个例子
    用二进制表示
    5+4
    原码{
    5:0,101
    4:0,100

    0,101
    +0,100
    ————
    1,001
    }
    {}括号里的仅仅是原码表示的5+4
    5的原码是 0,101 最高位的0是符号位代表+号
    4的原码是 0,100 最高位的0也是+号
    二者相加,结果是:1,001 最高位的1进到了符号位
    我们知道三位的二进制范围是-8~7,而5+4=9超过了最大值。
    所以,符号位会变成负号,与此对应的也正是刚才结果的符号位为1

    展开全文
  • 设计带符号位的 8 位加法器电路,每个加数的最高位为符号位,符号位‘1’ 表示-,符号位‘0’表示+
  • 入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。 出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
  • 符号整数/小数转化为二进制符号
  • 符号二进制计算

    千次阅读 2020-01-16 15:50:19
    十进制数的补码 二进制数的补码
  • 二进制符号数加法

    2017-06-15 09:24:07
    https://zhidao.baidu.com/question/329196379795134925.html 就是把符号位当作数据位一样处理。
  • 二进制符号数乘法的一些想法

    千次阅读 2019-11-23 11:36:23
    A和B是一个8bit有符号数,C=A*B,则C应该是一个16bit的有符号数,8bit有符号能用二进制表示的最大负数为-128,补码表示为10000000;最大正数为127,补码表示为01111111。两个最小的复数相乘(-128*-128)才会溢出,...
  • 补码在二进制符号运算中的应用

    千次阅读 2018-03-20 20:22:51
    也可以通过6+8=14(表盘为12进制,满12部分舍去,所以14表示的即为2点)顺时针转动8个小时实现同样效果。所以在表盘上,-4与+8具有同样的效果。故对于-4而言,+8称为它在以12为“模”时的补数。也就是...
  • 符号数的二进制表示方式

    万次阅读 2019-04-21 14:51:36
    以4字节的整型为例,4byte=32bit: 32位数一共可以表示个数,对于有符号... 二进制源码 二进制反码 二进制补码 65535 01111111 11111111 11111111 11111111 01111111 11111111 11111111 11111111 ...
  • matlab实现十进制到二进制定点有符号补码小数的转换,其中定点小数的整数部分位长和小数部分位长可以自己指定,输出的最高位表示符号位(0为整数,1为负数),补码表示
  • 符号二进制乘法

    千次阅读 2020-04-13 22:16:17
    符号二进制数的乘法 我的失误(差点误以为自己乘法有问题,自己和别人算的不一样) x=101=-3 和y=011=3相乘 结果为110111=-9 我刚开始以为是简单的把连个二进制码相乘得到的结果就是其答案(001111),而事实确...
  • nm命令编程开发nm命令被用于显示二进制目标文件的符号表。语法nm(选项)(参数)选项-A:每个符号前显示文件名; -D:显示动态符号; -g:仅显示外部符号; -r:反序显示符号表。参数目标文件:二进制目标文件,通常是...
  • 1.二进制(Binary)0b print(0b11) 3 2.八进制(Octonary)0o print(0o11) 9 3.十六进制(hexadecimal) 0x print(0x11) 17
  • JS 二进制转10进制 带符号

    千次阅读 2018-07-24 16:23:38
    今天项目中一个需求 html js...//二进制转十进制 带符号 c是 二进制的数组 如[1,0,1,1,0,1,0] function convert(c) { console.log(c) var d = "" if (c[0] == 1) { for (var i = 1; i &lt; c.length;...
  • 二进制中的符号位的区分以及表示

    万次阅读 2018-05-23 13:27:00
    如果用来表示无符号数,就可以表示0~255恰好256个二进制数;而如果表示带符号数,则最高位就是符号位,0表示"+",1表示"-",剩下的7位用来表示绝对(采用补码形式).0用"+0"表示,正数为+1~+127,负数为-1~-1...
  • 符号二进制数的减法

    千次阅读 2020-01-18 12:48:49
    符号二进制数的减法 本人的简单学习过程。。。 题目:十进制6-12=-6,利用有符号二进制写出来过程。
  • 右移:如果二进制对应十进制数是正,带符号和无符号右移无区别。都是高位补0 如果是负数,先求补码,然后移动:如果带符号右移,最高位(符号位)不动,其他位移动,移出的高位空位补1 然后再求 补得到结果 ...
  • bin -> 无符号进制>> a = convert_bin2dec('101000001', 0); 一 = 321 bin -> 有符号进制>> a = convert_bin2dec('101000001', 1); a = -191
  • 我想从五个方面来说说有符号二进制加法溢出以及溢出后该如何计算这些个问题: ·什么是有符号二进制数 补码的计算以及还原 有符号数的加法 什么是溢出、什么是自然丢弃 溢出后该如何正确计算结果 一.什么是有符号...
  • java二进制运算符

    2020-05-17 00:12:13
    二进制最高位是符号位:0表示正数 1表示负数 正数的原码,反码,补码都是一样 负数的反码=它原码符号位不变,其他位取反(0—变—1 )( 1—变—0) 负数的补码=它的反码+1(加的是1的原码00000001) 0的反码,补码都...
  • c++中带符号二进制数的表示

    千次阅读 2019-05-21 09:42:27
    c++中带符号二进制数的表示 一、二进制表示带符号数方法: (1)最高位为1表示负数,最高位为0表示正数; (2)哪一位是最高位取决于变量类型的字节数; eg:在win32控制台应用程序中,int是32位,即是4字节的类型,...
  • 8位二进制数的表示范围为[-127,127]; 反码:正数数值部分是数值本身,符号位为0;负数的数值部分是在正数表示的基础上对各个位取反,符号位位1。 8位二进制数的表示范围为[-127,127]; 补码:正数数值部分是数值...
  • 二进制数是在通常所见到的十进制数之后发展起来的一种新的数的表示形式,然后我们该如何表示一个二进制数呢,在通常意义上我们像十进制那样,给一个二进制0,1串,加上正负号,或者有符号,无符号的某种标志,就可以...
  • 原理就是:正数的源码+负数的源码= 256 比如补码和源码 //即所有的负值的byte的补码和源码想象为无符号的话之和为256 -(NSString *)...//二进制有无符号 11111111 // twoBrand = @"10000001"; i...
  • 二进制是Binary,简写为B八进制是Octal,简写为O十进制为Decimal,简写为D十六进制为Hexadecimal,简写为H
  • C++ 二进制运算符

    2020-09-12 20:34:08
    c/c++中常用的二进制运算符有六个。  1.&: 与 操作.作用于两个二进制数,当然也可以对整型数据进行操作(当两边为整型数据会自动转化为二进制数).二进制与用来对位进行置零或者复位.如果两个值进行二进制与,只有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 429,044
精华内容 171,617
关键字:

二进制符号