精华内容
下载资源
问答
  • 1. 或(or |) 只要有一个为1,就为1。 2. 与(and &) 两个都为1,就为1。 3. 异或(xor ^) 两个不一样时,就为1。 4. 非(not !...2. 如何获取某个值的第n的(二进制)值是多少? 例如:如何获取0x8F的

    1. 或(or |)

    只要有一个为1,就为1。

    2. 与(and &)

    两个都为1,就为1。

    3. 异或(xor ^)

    两个不一样时,就为1。

    4. 非(not !)

    1是0,0是1。

    提示: CPU计算的本质就是逻辑运算


    逻辑运算的具体应用

    1. CPU如何计算2 + 3

    图1 cpu如何实现2 + 3
    图1 cpu如何实现2 + 3

    2. 如何获取某个值的第n位的(二进制)值是多少?

    例如:如何获取0x8F的第3位的二进制值是多少?(在16位机器上)
    方法解析:
    1. 先取0000 0000,然后将第3位设置为1,即0000 0100
    2. 将0x8F用二进制表示 1000 1111
    3. 将两个二进制进行‘与’运算
            1000 1111
        &   0000 0100
    -----------------------
            0000 0100
    4. 看‘与’的结果的第n位是多少,则原数中第n位的二进制值就是多少
    
    

    3. 最简单的加密算法

    条件:在16位机器上
    要加密的数据:2017
    密钥:9
    每两位进行一次加密
        0010 0000                0001 0111
    ^   0000 1001           ^    0000 1001
    ------------------      ------------------------
        0010 1001                0001 1110
    加密结果:29                     1E
    
        0010 1001                0001 1110
    ^   0000 1001           ^    0000 1001
    ------------------      ------------------------
        0010 0000                0001 0111
    解密结果:20                      17
    
    
    展开全文
  • 2、记住前15个数值的二进制与十六进制表现形式有助于完成它们之间的转换工作 3、在使用无符号数值时,进位标志有助于判断是否发生溢出 4、使用逻辑运算符“or”,“and”,和“xor”分别来实现对比特的设置、...

    1、所有的小数系统都使用了某一个数值为基础的幂值

    2、记住前15个数值的二进制与十六进制表现形式有助于完成它们之间的转换工作

    3、在使用无符号数值时,进位标志有助于判断是否发生溢出

    4、使用逻辑运算符“or”,“and”,和“xor”分别来实现对比特位的设置、测试和反置操作

    5、表示负数有三种方法:符号数值表示法、1的补码表示法和2的补码表示法。前两种表示法都会遇到正负零的问题,而后一种能表示一个负数值

    6、在表示负数值时,2的补码表示法是最常用的表示法,它用于inter处理器之中

    7、在使用2的补码表示法时,如果遇到最左边的比特位的进位值不同于进位到最左边比特位的进位值时,就会有溢出发生

    展开全文
  • 二进制  正整数的二进制表示 (假定类型是byte)  正整数的二进制表示与此类似, 只是在十进制中,每个位置可以有10个数字,从0到9,但在二进制中,每个位置只能是0或1。  例如: 0000 1010 ==> 10 负整数...

    二进制 

      正整数的二进制表示 (假定类型是byte)

       正整数的二进制表示与此类似, 只是在十进制中,每个位置可以有10个数字,从0到9,但在二进制中,每个位置只能是0或1。

        例如: 0000 1010     ==>   10  

         负整数的二进制表示 (假定类型是byte)

      十进制的负数表示就是在前面加一个负数符号 -,例如-123。但二进制如何表示负数呢? 

      其实概念是类似的,二进制使用最高位表示符号位,用1表示负数,用0表示正数。

      但负数表示不是简单的将最高位变为1,比如说:

      •   byte a = -1,如果只是将最高位变为1,二进制应该是10000001,但实际上,它应该是11111111。

      •   byte a=-127,如果只是将最高位变为1,二进制应该是11111111,但实际上,它却应该是10000001。

     

      和我们的直觉正好相反,这是什么表示法?这种表示法称为补码表示法,而符合我们直觉的表示称为原码表示法,补码表示就是在原码表示的基础上取反然后加1。取反就是将0变为1,1变为0。

      负数的二进制表示就是对应的正数的补码表示,比如说:

      •   -1:1的原码表示是00000001,取反是11111110,然后再加1,就是11111111。

      •   -2:2的原码表示是00000010,取反是11111101,然后再加1,就是11111110

      •   -127:127的原码表示是01111111,取反是10000000,然后再加1,就是10000001。

           给定一个负数二进制表示,要想知道它的十进制值,可以采用相同的补码运算。比如:10010010,首先取反,变为01101101,然后加1,结果为01101110,它的十进制值为110,所以原值就是-110。

           byte类型,正数最大表示是01111111,即127,负数最大表示是10000000,即-128,表示范围就是 -128到127。其他类型的整数也类似,负数能多表示一个数。

     

    负整数为什么采用补码呢?

      负整数为什么要采用这种奇怪的表示形式呢?原因是:只有这种形式,计算机才能实现正确的加减法。

      计算机其实只能做加法,1-1其实是1+(-1)。如果用原码表示,计算结果是不对的。比如说:

          

    1   -> 00000001

    -1 -> 10000001

    + ------------------

    -2 -> 10000010

     

    用符合直觉的原码表示,1-1的结果是-2。

     

    如果是补码表示:

     

    1   -> 00000001

    -1 -> 11111111

    + ------------------

    0  ->  00000000

     

    结果是正确的。

     

    再比如,5-3:

     

    5   -> 00000101

    -3 -> 11111101

    + ------------------

    2  ->  00000010

     

    结果也是正确的。

     

    就是这样的,看上去可能比较奇怪和难以理解,但这种表示其实是非常严谨和正确的。

     

    理解了二进制加减法,我们就能理解为什么正数的运算结果可能出现负数了。当计算结果超出表示范围的时候,最高位往往是1,然后就会被看做负数。比如说,127+1:

     

    127   -> 01111111

    1       -> 00000001

    + ------------------

    -128  ->10000000

     

    计算结果超出了byte的表示范围,会被看做-128。

    补码的好处

      以 +1 和 -1 作加法运算为例,如下图所示:

      

      相信你已经发现,1 + (-1) 这样的加法运算只要将二进制数相加,然后-1的末位就会变成2,根据逢2进1机制,从右至左依次所有位都会变成0。

      最后,最左端的符号位也会进位1变成0,丢弃溢出的1,就得到最后的结果0的二进制表示32个0。

      对照本节开头的图,会发现所有的减法都可以转换成二进制位的加法运算:1-2 可以转换成1+(-2),(-1)-(-2)可以转换成-1+2……

      这跟数学中的表示是一样的,而且非常地方便计算(很多计算机科学家都是从数学领域转入计算机工程,所以在很多细微之处的都能见到数学的影子)。因此,现代计算机硬件结构实际上只设计了加法器,大部分的减法其实都是转换成加法后再运算。

       备注:

        以正数的二进制数表示为基准,负数的表示只改变符号位,这样的表示方式就是原码。因此,正数的表示方式都是原码。

        反码就是将原码除符号位以外的值全部取反,原来是1的变为0,原来是0的变为1。

        补码就是在反码的基础上,在二进制数的右端末位加1(逢2进1)。

    小结

        正数的原码和反码和补码都一致;负数的原码是正数的符号位取反;负数的反码是原码的非符号位取反;负数的补码是反码加1。

     

    位运算

    • 左移:操作符为<<,向左移动,右边的低位补0,高位的就舍弃掉了,将二进制看做整数,左移1位就相当于乘以2。

    • 无符号右移:操作符为>>>,向右移动,右边的舍弃掉,左边补0。

    • 有符号右移:操作符为>>,向右移动,右边的舍弃掉,左边补什么取决于原来最高位是什么,原来是1就补1,原来是0就补0,将二进制看做整数,右移1位相当于除以2。

    逻辑与或

      两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(|| 和 |)的运算规则也基本相同。 &和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。

      所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。 对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。 所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程; 对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。 所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。

    小技巧

      ⑴ 乘法除法:n * 2 等价于 n << 1; n * 5 等价于 n << 2 + 1; n / 2 等价于 n >> 1。

      备注:JVM执行时会自动转化,大部分其它高级语言的编译器会做类似优化转换,所以除非有特殊的理由,否则别这么写。

      ⑵ 取低位:n & 0x0000FFFF;取高位:n & 0xFFFF0000。

      ⑶ 奇偶判断:n & 1,等于0为偶,等于1为奇。

      ⑷ 正负判断:(n >>> 31) & 1,等于0为正,等于1为负。

      ⑸ 取余:n % m ,如m为2的幂次方,可用(n & (m - 1))替代。

     

     

    参考:老马说编程

      

    Java位运算符及二进制常识

    转载于:https://www.cnblogs.com/SacredOdysseyHD/p/8461519.html

    展开全文
  • python中的二进制逻辑运算逻辑运算 逻辑运算 python中含有和c++一样的&,|,~,^等逻辑运算,可以模拟加减乘除等基础运算。 由于在python中定义变量类型没有固定的长,我们在使用bin()方法打印变量的二进制表示时...

    python中的二进制逻辑运算

    逻辑运算

    python中含有和c++一样的&,|,~,^等逻辑运算,可以模拟加减乘除等基础运算。
    由于在python中定义变量类型没有固定的位长,我们在使用bin()方法打印变量的二进制表示时,会遇到负数打印的是原码的情况。如下图所示,这与我们印象中的计算机存储的是补码的概念不符,这里打印的是原码,主要还是因为Python变量没有固定位长,不存在溢出情况,故而无法确定符号位。
    在这里插入图片描述
    那怎么办呢?
    这里,我们需要手动的给变量设置位长,如下图所示,我们将变量与上一个值,如果与上32位,则变量是32位,如果与上64位,则变量是64位。注意,这里输出的其实已经不是真正负数-2的补码了,而是对应-2补码的无符号整数的原码。
    在这里插入图片描述
    好了,我们通过手动设置位长可以模拟输出负数的补码,这对于我们在进行逻辑运算时有帮助,但是如果我们最后想要输出原来的负数表示怎么办,如果我们直接将与之后的值输出,很明显,这是一个正数。如下图所示,因为高位已经被0xFFFFFFFF给清零了。
    在这里插入图片描述

    所以,这里我们还得做一个操作,来还原补码的符号位。如下图所示,即先对与后的补码进行取反,以使得被截去的高位恢复1,然后再进行异或,恢复低位刚才由于取反而颠倒的0和1。
    在这里插入图片描述

    展开全文
  • 运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是...
  • 首先要理解整数在机器内是如何用补码表示的:原码、补码、反码按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制位进行运算。位运算有:& 位逻辑与,1&1等于1,1&0等于0,0&1...
  • 二进制位运算详解

    千次阅读 2017-12-19 18:25:30
    ① 将数转化为二进制(实际机器操作中本身就是二进制,这里的意思是人工计算) ② 每一都进行如下运算: a) 1与1与运算得1 b) 1与0(0与1)与运算得0 c) 0与0与运算得0 两个数按进行或运算特点有: ...
  • 今天参照以下文章的内容,用Python实现了二进制位运算实现加法的打码。以下为代码,采用的递归调用:def getSum(a,b):ab_and=(a&b)<<1 #在这个地方出了一个逻辑bug,排查了半个小时才排查出来,我刚刚开始...
  • 二进制,是最简单的 1.表示简单 自然界有很多两种相对对立,稳定的两种状态,可以代表0 1 例如电压高低,有无磁场 ...3.二进制逻辑运算正好可以统一起来 与或非 异或运算 XOR 运算 就等同于两个一位二进制数相加 ...
  • 思路:2的幂次的二进制只含有一个1,n-1则除了该为0,其余皆为1,故而n & (n-1) = 0 import java.util.*; public class Main { public static void main(String[] args){ Scanner in = new Scanner(System...
  • 二进制逻辑运算详解

    2009-08-17 19:04:43
     计算机的逻辑运算的算术运算的主要区别是:逻辑运算是按进行的,之间不像加减运算那样有进位或借位的联系。 逻辑运算主要包括三种基本运算:逻辑加法(又称“或”运算)、逻辑乘法(又称“与”运算)和...
  • 数字逻辑电路-二进制逻辑运算

    千次阅读 2019-06-18 10:25:21
    这个操作按运算 异或左边四取反,右边四相同
  • 1 二进制 2 原码、反码、补码 3 运算符 4 运算符使用技巧 上回学习运算符时,漏了运算符,因为运算符理解起来稍微有点复杂,所以要单独写一篇~ 要理解按运算符,要先了解计算机进行存储和计算的底层逻辑。...
  • 逻辑运算中两个十进制数进行运算,化为二进制后如果两个数数不同是在高位补零还是直接把数字搬下来? 答案: 逻辑运算中两个十进制数进行运算,化为二进制后如果两个数数不同,则对位数少的那个数在高位补零. ...
  • 首先要理解整数在机器内是如何用补码表示的:原码、补码、反码按位运算,就是对一个数(常量或变量)的二进制位与另一个数的对应二进制位进行运算。位运算有:& 位逻辑与,1&1等于1,1&0等于0,0&1...
  • 1八进制可以写成3位二进制,因为3位二进制可以表示十进制范围0~7,也就是1八进制的表示范围。 1十六进制可以写成4位二进制,因为4位二进制可以表示十进制范围0~15,也就是1十六进制的表示范围。 后缀B表示...
  • 逻辑运算又称布尔运算 布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。他用等式表示判断,把推理看作等式的变换。这种变换的有效性不依赖人们对符号的解释,只依赖于符号的组合规律 。学习数据结构知识总会用到...
  • 位二进制ALU运算

    2010-07-18 20:50:46
    数字系统综合设计,实现四位二进制逻辑运算和算术运算!
  • 判断某数的二进制形式的某(第 k )是否为 1,将其与 2k2^k 相与; 将某数的二进制形式的某(第 k )置 1,将其与 2k2^k 相或;
  • 很大可能是人类有10根手指,如果是海豚,也许它会发明二进制:)二进制和十进制没有很大的区别,都是用来计数的,但二进制还可以用来做逻辑运算,而逻辑运算才是计算机最擅长做的事情。我们在学校里学习计算机组成...
  • 二进制的四则运算及逻辑运算

    千次阅读 2020-08-03 16:48:07
    因为二进制只有两个数码,一个是0一个是1,也就是0和1之间的运算。 例题 计算37-38的值 解: 分别求得+37和-38的补码:00100101、11011010 。 然后,进行按求和,得到: 00100101+11011010 = 11111111 所以,...
  • 位逻辑运算,属性设置按位逻辑运算在高效率的数据操作中应用很多,平时用的高级语言里面,多数时候不需要我们去手动设置这些,因为已经被封装在各种模块/类里面了。在需要手动定义一些功能的时候,这些运算方法很...
  • 负数的二进制表现形式:其实就是该数的绝对值取反+1. 进制转换(二进制,八进制,十进制,十六进制),原理解析 十六进制的表现形式: (2)(与、异或、左移、右移、三元运算符) 转载于:...
  • 位运算,一种逻辑运算,直接操作二进制中的位。...相对应的二进制位同为 1 结果才为 1,否则都是 0,形如:0&0=0,0&1=0,1&0=0,1&1=1 。利用这个特性,我们判断奇偶数就可以不用再传统的...
  • 进制转换、运算、逻辑运算

    千次阅读 2017-05-05 15:18:20
     二进制:用0-1表示,满2进1 八进制:用0-7表示,满8进1 十进制:用0-9表示,满10进1 十六进制:用0-9,A~F表示,满16进1 如何计算7的二进制?(注意,这里7是10进制。)   二进制如何转十进制呢? ...
  • <h2>JS 使用二进制位运算的一些例子 我举得例子肯定不全,欢迎大家头脑风暴~ | 运算符 | 用法 | 描述 | | --- | --- | --- | | 按位与(AND) | <code>a & b</code> | 对于每一个比特位࿰...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,402
精华内容 960
关键字:

二进制位逻辑运算