精华内容
下载资源
问答
  • 二进制取反举例
    2022-02-22 14:41:10

            都知道在有符号的数字中,最高位为符号位,那么这个符号位究竟是什么意思呢?简单的负号吗?

            在有符号的数字中,最高位就代表该数的负数。

            为了方便我这儿拿八位数字举例,10000000就是代表负128

            ok,知道了这一点之后,对于负数的二进制理解就很容易了

            例如,-27(这里还是以八位有符号数字举例哈),就应该是(-128)+(128-27)

            因为八位有符号数字不能表示128,所以我们写成(-128)+(127-27+1)

            我们先来算127-27

            二进制表示为01111111-00011011

            很显然,就相当于后七位取反,即为01100100

            加上-128即为第一位加个1:11100100

            把最后那个一加上即为11100101

            所以最后看起来的形式就像是:

            1:正数的二进制取反((-128)+(127-27))

            2:加一((-128)+(127-27+1))

    【小补充一下】

            那么如果在c中利用位运算的话怎么做呢

            还是例如八位,这里设一个x为正数

            1: x ^ 01111111 = y                        (x ^ 127 = y)

            2: y & 00000001 = z                      (y & 1 = z)

            3: z & 10000000 = result               (z & -128 = result)

    【再补充一下】

            这样做还有个好处就是方便数字的扩展

            举个例子,咱这边有个八位的有符号数,对于正数的扩展是很简单的,只需要在其前面加0就好了

            但是对于负数,比如说(-128+x)(看了前面的应该知道我为什么这样表示)

            如果想要扩展一位,那么最高位补上符号位1,该数字就变成了(-256+128+x)(因为增加一位,所以-128变成了128)即为(-128+x)我们就在不改变其值的基础上扩展了它的位数

    更多相关内容
  • 二进制取反运算

    万次阅读 2020-06-27 16:59:27
    1、关于二进制表示 1、正数补码 2、负数补码 3、取反运算 1、关于二进制表示 这里有几个概念,关于原码、补码和反码 补码:在计算机系统中,数值一律用补码来表示(存储) (正数的补码是其原码。例如十进制...

    总结一下,有点疑惑。

    目录

    1、关于二进制表示

    1、正数补码

    2、负数补码

    3、取反运算


    1、关于二进制表示

    这里有几个概念,关于原码、补码和反码

    补码:在计算机系统中,数值一律用补码来表示(存储)

    (正数的补码是其原码。例如十进制数8,其二进制原码表示为00001000,则其补码即为0000 1000。最高位是符号位,这里0000 1000标红的0是符号位,0表示是正数,如果是1的话就表示负数,例如1000 1000就表示-8。)

    不知道大家有没有疑惑128明明可以表示为10000000,但是这样的话最高位就是符号位了呀。。。。。。那10000000不是应该表示一个负数吗?其实是我自己理解错了,来解释一下,首先128是一个整数,一个整数有4个字节,而一个字节有8位。所以128的正确原码应该为00000000 00000000 00000000 100000000,只是平常写的时候8位能计算得128,所以也就忽略了高位二进制。但是我又有了一个疑惑,可以用下面一句话解答:

     8位二进制编码带符号数的范围只有-127~+127(补码为-128~+127),所以要表示128的话需要9位二进制编码。根据这一句话我明白,应该根据整数的大小来确定所需字节数,而不需要把所有字节列出来。上面举例的8,在一个字节表示的数字范围内,所以可以直接用8位二进制来表示,最高位表示符号位。

    所以理解了数据的二进制表示,下面开始了解。

    1、正数补码

    正数的就比较简单了   反码=补码=原码

    2、负数补码

    负数就复杂一点了

    例如(-4)

    首先(4)的二进制为0000 0100

    所以(-4)的二进制为1000 0100

    (-4)的反码(取反):符号为1不变,紧跟着后面的每一位取反,得1111 1011

    (-4)补码:用反码加1,二进制相加,逢2进1。得1111 1100

    3、取反运算

    计算机中的运算符取反是怎样计算的呢?

    例如0011 1100  表示整数60   在计算机中对其执行取反动作后结果是是-61,这是什么意思呢?

    首先我们来取反后得到1100 0011,如果我们单纯的加起来就是195,可是并不是-61呀?

    OK,我们知道计算机中是以补码的方式存储数据的。所以对取反后的二进制码我们需要求出其补码。这时的补码表示的才是最后的整数。我们来看一下,这里1100 0011最高位是1,说明这是一个负数,那么需要先对这个取反过来的二进制再取反,符号位不变,得1011 1100,补码=反码+1,所以再对1011  1100加1,得1011 1101,这时再转化成十进制数就是-61了。

    上面的方法用来理解为什么是-61就行,但是计算的话这里还有一个快速的办法来求解。

    取反后得到的1100 0011表示整数195,然后可以直接用195-256=-61

    展开全文
  • Python的二进制位运算

    千次阅读 2020-12-05 09:14:17
    Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示:&:按位与|:按位或^:按位异或~:取反<>>:右移对于整型数据,各种...下面对各运算符进行举例说明:(1)首先看取反>>> ~1-...

    Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示:

    &:按位与

    |:按位或

    ^:按位异或

    ~:取反

    <

    >>:右移

    对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明:

    (1)首先看取反

    >>> ~1

    -2

    >>> ~0x0001

    -2

    >>>

    正整数1,int型是32位的,就是00000000 00000000 00000000 00000001 求反变为11111111 11111111 11111111 11111110,这正好是-2的补码。同样十六进制的0x0001结果是一样的。

    (2)按位与

    >>> 1&2

    0

    >>> 1&3

    1

    >>>

    对于按位与,就是对参加运算的两个整数的补码逐位进行逻辑与运算,即参加运算的两个运算量,如果两个相应位都为1,则该位的结果为1,否则为0。

    (2)按位或

    >>> 1|1

    1

    >>> 1|2

    3

    >>>

    对于按位或,就是对参加运算的两个数字的补码逐位进行逻辑或运算,即参加运算的两个运算量,只要两个相应位中有一个为1,那么该位的结果为1;只有两个相应位都为0时,该位的结果才为0。

    (3)按位异或

    >>> 1^1

    0

    >>> 1^2

    3

    >>>

    对于按位异或,就是对参加运算的两个数字的补码逐位进行逻辑异或运算,即参加运算的两个运算量,如果两个相应位相同,那么该位的结果为0;如果两个相应位不同即相异,那么该位的结果为1。

    (4)左移运算

    >>> 1<<2

    4

    >>>

    对于左移运算,就是将一个数的二进制位整体向左移若干位,移位后在低位补零,高位溢出部分舍弃。所以1<<2就是把整数1的二进制补码00000000 00000000 00000000 00000001整体左移2位,舍弃溢出的高位并在低位补零后得到结果00000000 00000000 00000000 00000100,正好是十进制数4。实际上,将一个数左移几位,就相当于将这个数乘以2的几次幂。

    (5)右移运算

    >>> 4>>2

    1

    >>>

    对于右移运算,就是将一个数的二进制位整体向右移若干位,如果该数为正数,移位后的低位溢出部丢弃,高位补零;如果该数为负数,则移位后的低位溢出部丢弃,高位补1,以保持符号不变。所以4>>2就是把正整数4的二进制补码00000000 00000000 00000000 00000100整体右移2位,舍弃溢出的低位并在高位补零后得到结果00000000 00000000 00000000 00000001,正好是十进制数1。实际上,将一个数右移几位,就相当于将这个数除以2的几次幂。

    在优先级方面,取反运算符~跟算术运算符中的单目运算符(即只有一个操作数参加运算)同级,并且是所有位运算符中优先级最高的;然后是移位运算符(左移<>),它们比取反运算符和算术运算中的加减运算符低;最后是逐位与、或和异或运算符。各位运算符按照优先级有高到低排列如下所示:

    取反运算符 > 左移运算符 > 右移运算符 > 按位与运算符 > 按位异或运算符 > 按位或运算符

    在位运算符中,取反运算符(单目运算符)~的结合性是从右向左结合,其余双目运算符的结合性是从左向右结合。

    展开全文
  • 本学期四年制初中6年级信息技术教材增设了Python语言编程课,在准备课程时遇到了一个有趣的问题:Python语言有6个位运算符用于对二进制数值运算,包括“&、|、^、~、”。其中的取反运算“~”让人难以理解!比如:a=...

    d52a2834349b033b26b45725d3f842d7d439bdc8.jpeg?token=dee00c4158dbcdea0be8bcc92777b33d&s=6587FC1ED5804EF0145EAD7E03009079

    本学期四年制初中6年级信息技术教材增设了Python语言编程课,在准备课程时遇到了一个有趣的问题:Python语言有6个位运算符用于对二进制数值运算,包括“&、|、^、~、<<和>>”。其中的取反运算“~”让人难以理解!比如:a=60,在数学中,a的相反数是-60。而在计算机中:~a得到的值是 -61?!这是为什么?查看《C程序设计》(潭浩强著)和《C程序设计及其应用》(徐继扬著)等论述位运算的相关论著,只看到了对二进制的求反运算实例,没有十进制数的取反举例。在网上查看了部分老师的贴子,除了内容完全相同的,部分内容不同的帖子所表述的方法、理论相差稍多。且与上述两本论著的相关论述有少许出入。这更让人难以选择。经过反复研究、测算、对比,对此内容稍有所得,现作如下推论,欢迎指正。计算机中数的存储是以补码形式存放的,现在的计算机一般不用原码和反码进行运算,因为原码和反码在运算中要单独处理其符号。为了能做到将符号位和其它位统一处理,对减法也按加法来处理。这就要用到补码(参考潭浩强著《C程序设计》P256)。正数的补码与原码相同!负数的补码是在原码的基础上,除符号位外其余各位逐位取其反码,即将0变1,1变为0,然后加1取得的(参考徐继扬著《C程序设计及其应用》P20)。二进制数补码最左边的高位是符号位,0为正数,1为负数。计算机运算时先将十进制数转换为补码,用补码对数值进行运算,运算完成后再将补码转换为十进制数显示出来。比如对60取反,先把60变为二进制数:这是正数的补码0011 1100,然后对这个二进制数按位取反得到1100 0011;请注意这是一个负数,且是负数的补码。那么1100 0011这个负数的原码是什么呢?我们按照上一段表述的方法逆向处理:先将补码1100 0011减0000 0001变成反码1100 0010,再对符号位外的数值按位取反得到其原码10111101。这就是我们对60取反得到的数-61,其中最左边高位的1表示负数。再如对50取反,先把50变为二进制数的补码:0011 0010,然后对这个二进制数按位取反得到1100 1101;这是个负数的补码。我们要把它变为原码:先减0000 0001得到反码:1100 1100,再对符号位外的数值位按位取反得到其原码1011 0011。这就是我们对50取反得到的数-51。其中最左边高位的1表示负数。

    我们再来看看对负数取反的情况:-30的二进制数原码是:1001 1110,对符号位外的数值按位取反得到反码1110 0001,再加0000 0001得到它的补码1110 0010,对这个补码按位取反得到0001 1101,请注意这是一个正数,是正数的补码,正数的补码与原码相同,因此可直接将这个二进制数转换为十进制数29。

    再如对-10取反:-10的二进制数原码:1000 1010,对符号位外的数值位按位取反得到反码1111 0101,再加0000 0001得到它的补码1111 0110,对这个补码按位取反得到0000 1001,请注意这是一个正数,是正数的补码,正数的补码与原码相同,因此可直接将这个二进制数转换为十进制数9。

    综上所述:对一个正数求反,要注意将其二进制数按位取反后得到的负数补码转换为负数反码,再转换为负数的原码,再将这个负数的原码变为十进制数。

    对一个负数求反,要注意先将负数的二进制数值转换为补码再取反!用代数式~a=-(a+1)=-61表示。

    请注意:

    1、负数的原码与反码之间的按位取反运算符号位不变,只对符号位外的数值位取反。

    2、负数补码与正数补码之间的按位取反运算符号位同时改变。

    展开全文
  • 要表达0~127的十进制数,在FPGA使用一个8bit[7:0]的二进制就可以。 但是,我们要表达-127~127的十进制数,在FPGA中怎么表达,我们需要使用一个9bit[8:0]的数。最高位[8]是标志位。 2.将二进制表达的负数换成十进制...
  • 2、计算机在底层存储数据的时候,一律存储的是“二进制的补码形式”。int类型的4个字节的150的二进制码是:00000000 00000000 00000000 10010110。将以上的int类型强制类型转为1个字节的byte,最终在计算机中的...
  • 二进制转十进制 转化详解

    万次阅读 多人点赞 2019-07-23 10:29:33
    转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制; 1、 正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。 也就是说,将正的十进制数除以二,得到的商再除以二...
  • Java中关于十进制取反问题解决

    千次阅读 2015-08-05 17:51:38
    进制取反举例说明: 比如: 1取反(~1)为-2,-1(~-1)取反为0,首先这问题关系到原码,反码,补码的知识,这里就不做详细说明. (1)以正整数说明:现在对1以一个字节(1字节为8位)为例:1=0000 0001,~1表示...
  • 二进制的相反数为什么是按位取反加1,补码来源

    千次阅读 多人点赞 2020-07-28 09:23:53
    为什么会产生补码?补码怎么计算?二进制的相反数怎么表示?
  • 十进制转二进制

    2022-05-29 20:47:14
    十进制转二进制的思路与实现。
  • 在分析之前必须先明确如下几点:1.Java是用补码来存储负数...(2)负数的符号位固定为1,由原码转变为补码时的规则如下: {(1)原码符号位为1固定不变,整数的每一位二进制数位取反得到反码;(2)反码符号位为1不变,在...
  • 二进制学习01进制一、二进制简介1)什么是二进制?2)二进制的简写形式二、进制运算1)八进制运算表(1) 加法运算表(2)乘法运算表(3)八进制简单运算题三、数据宽度1)什么是数据宽度2)计算机中常用的基本数据宽度四、无...
  • 二进制编码以及二进制与十进制的转换
  • 二进制计算及转换

    2022-08-06 17:21:33
    二进制简单介绍 进制与十进制的计算对比 用二进制转十进制的转换关系 二进制转十进制 十进制转二进制 二进制的简单运算 算符&,简称“与” 算符|,简称“或” 算符!,简称“非” 算符~,简称“取反” 运算符^,简称...
  • 计算机中的二进制运算

    千次阅读 2021-07-24 00:39:39
    一、计算机中的二进制位运算??二进制的位运算并不是很难掌握,因为位运算总共只有5种运算:与、或、异或、左移、右移。与、或和异或运算的规律我们可以用表1总结如下。表1 与、或、异或的运算规律与(&)0 & 0...
  • 二进制常用运算方式和基本概念
  • 0 前言二进制的相关概念是学习数据存储、数据压缩、数据序列化的基石,只有真正搞清楚了二进制,才能逐步深入到算法源码,达到理解和复现的目的。本文将介绍二进制和数据存储的相关概念(包括位、字节、高低位、大小...
  • 二进制详解

    万次阅读 多人点赞 2018-06-25 17:22:30
    那如何把一个十进制的数转成二进制或者其他进制,请下图:十进制转二进制十进制的123转成二进制就是1111011,转成几进制都是一个道理。一、二进制1.1 二进制是计算机采用的表示数字的方式, 每个数位上只有0和1;1.2 ...
  • 首先,第一篇【谈谈二进制(一)】我们从进制本身的意义开始,认识了二进制和其他进制,然后完成了十进制和其他各种进制之间的转换。接着,第二篇【谈谈二进制(二)——四则运算】中,我们则通过十进制的四则运算原理,...
  • 本文介绍了二进制binary数据在存储器的表示方式,C语言的位运算符号,有符号和无符号混合运算的规则,主要是乘法和除法规则不同。最后以IIR滤波器定点实现的例子来说明如何提高计算精度。二进制数据与补码、原码和...
  • 为了更透彻的理解二进制及在计算机内部的表示,必须要有打破沙锅问到底的决心,就算是进度再慢,基础扎实了,也许走会更远,必境也使用java很多年,各种技术和框架也使用无数,深知原理的重要性,人总是要进步的,不...
  • 二进制减法类似于十进制的减法,我们从十进制的减法来推出二进制减法如何进行运算。 二进制计算 例如101001-011010=001111(41-26=15)的运算。 灰色部分为计算过程,绿色字为被减一得到的数,红色字为借一后得到...
  • 计算机原码,反码,补码的计算规则以及计算机内部二进制加减法举例 ##<1>. 原码:符号位+数组位;第一位为符号位,正数为0,负数为1;后面的位数为数值位,是真值的二进制表现形式。 反码:正数的反码就是原码...
  • JAVA-二进制基础

    2021-02-12 12:50:53
    一、二进制的概念计算机进制有:二进制、八进制、十六进制进制的基本特点是:每一位置上的数字必须在0-(进制-1)的范围内,也就是说二进制只能有0、1;八进制为:0-7;十六进制比较特殊为:0-9,A(10) B(11) C(12) D...
  • 二进制、十进制、十六进制理解

    万次阅读 2020-10-21 11:23:12
    1.如何理解二进制、十进制、十六进制 点击查看原文 1.1 十进制的理解: 生活中我们遇到的绝大部分数据都是十进制的,比如7、24、30、365等,如果把它们按照个位、十位、百位分解,可以这样表示: 数值 ...
  • 负数的二进制使用码补的形式,即:原码的二进制取反加1。 我们假设使用byte类型,则数据只有8个比特位,负6的二进制形式分3步形成,如下: 取反就是把0变成1,把1变成0。 所以负6的二进制形式为:1111 1010 有时候...
  • 这是一篇关于带符号二进制数据在计算机中表示方法及加减运算的文章,是《计算机原理》这门课程有关内容的总结性笔记。01 机器数表示方式1 机器数表示方式原码补码反码2 原码表示法又称带符号的绝对值表示。- 符号位:...
  • 负数的二进制和十进制之间的转换:1.十进制负数转换为二进制的方法为:1、将十进制转换为二进制数。2、对该二进制数求反。3、再将该二进制数加1.总之就是将十进制数转换为二进制数求补码即为结果。比如:-32第一步:...
  • 二进制:基础、正负数表示、存储与运算

    万次阅读 多人点赞 2018-09-11 11:35:53
    逻辑电路通常只有接通和断开两种状态,所以我们以二进制来处理会非常方便。所谓二进制表示从0开始,“逢二进一”(N进制则逢N进一)。比如十进制的0、1、2的二进制表示为0、1 、10。 二、进制转换 网上有很多进制...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,606
精华内容 5,042
热门标签
关键字:

二进制取反举例