精华内容
下载资源
问答
  • 按位与运算(&) 一个比特(Bit)只有 0 和 1 两个取值,只有参与&运算的两个都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。 ...

    C语言位运算

    所谓位运算,就是对一个比特(Bit)位进行操作。比特(Bit)是一个电子元器件,8个比特构成一个字节(Byte),它已经是粒度最小的可操作单元了。

    C语言提供了六种位运算符:
    在这里插入图片描述

    按位与运算(&)

    一个比特(Bit)位只有 0 和 1 两个取值,只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&&非常类似。

    C语言中不能直接使用二进制,&两边的操作数可以是十进制、八进制、十六进制,它们在内存中最终都是以二进制形式存储,&就是对这些内存中的二进制位进行运算。其他的位运算符也是相同的道理。

    例如,9 & 5可以转换成如下的运算:

     0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 10019 在内存中的存储)
    &0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 01015 在内存中的存储)
    -----------------------------------------------------------------------------------
     0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 00011 在内存中的存储)
    

    也就是说,按位与运算会对参与运算的两个数的所有二进制位进行&运算,9 & 5的结果为 1。

    又如,-9 & 5可以转换成如下的运算:

     1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    &0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 01015 在内存中的存储)
    -----------------------------------------------------------------------------------
     0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 01015 在内存中的存储)
    

    -9 & 5的结果是 5。

    再强调一遍,&是根据内存中的二进制位进行运算的,而不是数据的二进制形式;其他位运算符也一样。以-9&5为例,-9 的在内存中的存储和 -9 的二进制形式截然不同:

     1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    -0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 1001-9 的二进制形式,前面多余的 0 可以抹掉)
    

    按位与运算通常用来对某些位清 0,或者保留某些位。例如要把 n 的高 16 位清 0 ,保留低 16 位,可以进行n & 0XFFFF运算(0XFFFF 在内存中的存储形式为 0000 0000 – 0000 0000 – 1111 1111 – 1111 1111)。

    【实例】对上面的分析进行检验。

    #include <stdio.h>
    int main()
    {
        int n = 0X8FA6002D;
        printf("%d, %d, %X\n", 9 & 5, -9 & 5, n & 0XFFFF);
        return 0;
    }
    

    在这里插入图片描述

    按位或运算(|)

    参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。例如1|1为1,0|0为0,1|0为1,这和逻辑运算中的||非常类似。

    例如,9 | 5可以转换成如下的运算:

      0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 10019 在内存中的存储)
    | 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 01015 在内存中的存储)
    -----------------------------------------------------------------------------------
      0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 110113 在内存中的存储)
    

    9 | 5的结果为 13。

    又如,-9 | 5可以转换成如下的运算:

       1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    |  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 01015 在内存中的存储)
    -----------------------------------------------------------------------------------
       1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    

    -9 | 5的结果是 -9。

    按位或运算可以用来将某些位置 1,或者保留某些位。例如要把 n 的高 16 位置 1,保留低 16 位,可以进行n | 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 – 1111 1111 – 0000 0000 – 0000 0000)。

    【实例】对上面的分析进行校验。

    #include <stdio.h>
    int main()
    {
        int n = 0X2D;
        printf("%d, %d, %X\n", 9 | 5, -9 | 5, n | 0XFFFF0000);
        return 0;
    }
    

    在这里插入图片描述

    按位异或运算(^)

    参与 ^ 运算两个二进制位不同时,结果为 1,相同时结果为 0。例如0^ 1为1,0^ 0为0,1^1为0。

    例如,9 ^ 5可以转换成如下的运算:

     0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 10019 在内存中的存储)
    ^0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 01015 在内存中的存储)
    -----------------------------------------------------------------------------------
     0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 110012 在内存中的存储)
    

    9 ^ 5的结果为 12。

    又如,-9 ^ 5可以转换成如下的运算:

       1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    ^  0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 01015 在内存中的存储)
    -----------------------------------------------------------------------------------
       1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0010-14 在内存中的存储)
    

    -9 ^ 5的结果是 -14。

    按位异或运算可以用来将某些二进制位反转。例如要把 n 的高 16 位反转,保留低 16 位,可以进行n ^ 0XFFFF0000运算(0XFFFF0000 在内存中的存储形式为 1111 1111 – 1111 1111 – 0000 0000 – 0000 0000)。

    【实例】对上面的分析进行校验。

    #include <stdio.h>
    int main()
    {
        unsigned n = 0X0A07002D;
        printf("%d, %d, %X\n", 9 ^ 5, -9 ^ 5, n ^ 0XFFFF0000);
        return 0;
    }
    

    在这里插入图片描述

    取反运算(~)

    取反运算符~ 为单目运算符,右结合性,作用是对参与运算的二进制位取反。例如~1为0, ~ 0为1,这和逻辑运算中的!非常类似。。。

    例如,~9可以转换为如下的运算:

    ~ 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 10019 在内存中的存储)
    -----------------------------------------------------------------------------------
      1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0110-10 在内存中的存储)
    

    所以~9的结果为 -10。

    例如,~-9可以转换为如下的运算:

    ~ 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    -----------------------------------------------------------------------------------
      0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 10008 在内存中的存储)
    

    所以~-9的结果为 8。

    【实例】对上面的分析进行校验。

    #include <stdio.h>
    int main()
    {
        printf("%d, %d\n", ~9, ~-9 );
        return 0;
    }
    

    在这里插入图片描述

    左移运算(<<)

    左移运算符<<用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补0。

    例如,9<<3可以转换为如下的运算:

    << 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 10019 在内存中的存储)
    -----------------------------------------------------------------------------------
       0000 0000 -- 0000 0000 -- 0000 0000 -- 0100 100072 在内存中的存储)
    

    所以9<<3的结果为 72。

    又如,(-9)<<3可以转换为如下的运算:

    << 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    -----------------------------------------------------------------------------------
       1111 1111 -- 1111 1111 -- 1111 1111 -- 1011 1000-72 在内存中的存储) 
    

    所以(-9)<<3的结果为 -72

    如果数据较小,被丢弃的高位不包含 1,那么左移 n 位相当于乘以 2 的 n 次方。

    【实例】对上面的结果进行校验。

    #include <stdio.h>
    int main()
    {
        printf("%d, %d\n", 9<<3, (-9)<<3 );
        return 0;
    }
    

    在这里插入图片描述

    右移运算(>>)

    右移运算符>>用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。如果数据的最高位是 0,那么就补 0;如果最高位是 1,那么就补 1。

    例如,9>>3可以转换为如下的运算:

    >> 0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 10019 在内存中的存储)
    -----------------------------------------------------------------------------------
       0000 0000 -- 0000 0000 -- 0000 0000 -- 0000 00011 在内存中的存储)
    

    所以9>>3的结果为 1。

    又如,(-9)>>3可以转换为如下的运算:

    >> 1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 0111-9 在内存中的存储)
    -----------------------------------------------------------------------------------
       1111 1111 -- 1111 1111 -- 1111 1111 -- 1111 1110-2 在内存中的存储) 
    

    所以(-9)>>3的结果为 -2

    如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1)。

    【实例】对上面的结果进行校验。

    #include <stdio.h>
    int main()
    {
        printf("%d, %d\n", 9>>3, (-9)>>3 );
        return 0;
    }
    

    在这里插入图片描述

    展开全文
  • 按位与运算(&)和按位或运算符(|)

    千次阅读 多人点赞 2021-02-07 22:56:44
    按位与运算(&) 定义:参加运算的两个数据,二进制进行""运算运算规则: 0&0=0 ,0&1=0 ,1&0=0 ,1&1=1 总结:两同时为1,结果才为1,否则结果为0。 例如:3&5 即 0000 0011...

    按位与运算(&)
    定义:参加运算的两个数据,按二进制位进行"与"运算。
    运算规则:

    0&0=0 ,0&1=0 ,1&0=0 ,1&1=1

    总结:两位同时为1,结果才为1,否则结果为0。

    例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。

    按位或运算符(|)

    定义:参加运算的两个对象,按二进制位进行"或"运算。

    运算规则:

    0|0=0 ,0|1=1 ,1|0=1 ,1|1=1

    总结:参加运算的两个对象只要有一个为1,其值为1。

    例如:3|5即 0000 0011| 0000 0101 = 0000 0111,因此,3|5的值得7。

    展开全文
  • 1. bitand = bit + and,也就是 '按位与' 运算(二进制) 2 语法 bitand(exp1, exp2) return number 功能:exp1 和 exp2 的相应进行比较,'全 1 为 1,否则为 0' exp1 exp2 结果 0 0 0 0 1 0 1 0 0 1 1 ...

    文章目录

    1 概述

    1. bitand = bit + and,也就是 '按位与' 运算(二进制)
    

    2 语法

    bitand(exp1, exp2)	return number
    
    功能:exp1 和 exp2 的相应位进行比较,'全 1 为 1,否则为 0'
    exp1	exp2	结果
    0		0		0
    0		1		0
    1		0		0
    1		1		1
    

    示例:将 5 和 6 按位与 运算

    5 = 1 0 1
    6 = 1 1 0
    
    select bitand(5, 6) from dual;  -- 1 0 0 = 4
    
    展开全文
  • 【opencv-python】 cv2.bitwise_and图像算术运算--运算1.背景2.参数3.示例 1.背景 详细文档,请查阅官方资料。 本博客尽可能地简单明了,如有错误,欢迎指正。...opencv提供了图像算术运算,其中按位运算

    【opencv-python】 cv2.bitwise_and图像算术运算--按位与运算

    1.背景

    详细文档,请查阅官方资料。
    本博客尽可能地简单明了,如有错误,欢迎指正。

    本博客的python以及cv2版本如下:

    python:3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)]
    opencv-python:4.5.1.48
    

    opencv提供了图像算术运算,其中按位运算有 AND, OR, NOT, XOR 。
    本博客介绍按位与运算的api:

    cv2.bitwise_and(src1, src2[, dst
    展开全文
  • 位运算位或、异或)

    千次阅读 2021-02-28 10:00:00
    )参加运算的两个数,二进制进行“运算运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数补码形式参加按位与运算)即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。例:3 &...
  • )参加运算的两个数据,二进制进行“运算运算规则:0&0=0;0&1=0;1&0=0;1&1=1;即:两同时为“1”,结果才为“1”,否则为0例如:3&5即 0000 0011& 0000 0101 = 00000001因此,3&...
  • 一、位运算 位即二进制位或bit位 所有运算到计算中底层中都会变成位运算位运算可以提高程序的效率,而且我们在研究JDK或者某个框架的源码时,会发现很多地方都用到了位运算! 例如我们在对数组进行排序时会大量用到...
  • 1.概念:参加运算的两个对象,二进制进行“运算,负数补码形式参加按位与运算。2.规则0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两同时为“1”,结果才为“1”,否则为0例如:4&30 即 0000 ...
  • 原标题:位运算小结(位或、位异或、取反、左移、右移)位运算不管是在Java语言,还是在C语言中,或者其他语言,都是经常会用到的,所以本文也就不固定以某种语言来举例子了,原始点就从0、1开始。位运算...
  • C语言按位运算

    2021-03-30 20:49:28
    按位运算就是二进制层面每个比特的运算 。一个Bit位只有 0 和 1 两个取值,只有参与&运算的两个位都为 1 时,结果才为 1,否则为 0。例如1&1为 1,0&0为 0,1&0也为 0,这和逻辑运算符&相同。 ...
  • 一,Java 位运算1.表示方法:在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。(1)正数的最高位为0,其余各位代表数值本身(二进制数)。(2)对于负数,...
  • public class Main { public static void main(String[] args) { bit(); modulus(); } public static void bit() { int number = 100 * 1000;... } } 执行结果: 位运算耗时: 1004 取模运算耗时: 20445
  • 一、位运算按位计算位运算的操作对象只能是整型或字符型数据。C语言提供6种位运算符:位运算不产生进位&| 或^异或~ 位取反<>>右移复合赋值运算符(11):&=、|=、=、<<=、>>=1、...
  • JAVA位运算位取反

    2021-02-12 11:51:14
    一直纠结于位运算中的 位取反 以及原码、反码、补码之间的各种关系,反正各种混淆各种懵逼。经过一小段时间才弄明白这个别人觉得很容易的问题。可能还是我基础不太好。位运算是对操作数以二进制为单位的进行的运算...
  • C 语言按位运算符

    2021-05-19 15:53:29
    C 语言按位运算符在本教程中,您将通过示例了解C语言编程中所有6个按位运算符。在算术逻辑单元(位于CPU内)中,诸如加法,减法,乘法和除法之类的数学运算...让我们假设两个整数12和25的按位与运算。12=00001100(二...
  • 在OpenCV内,常见的按位运算函数如下表所示: 函数名 含义 bitwise_and() bitwise_or() 位或 bitwise_xor() 位异或 bitwise_not() 位取反 运算 数学中运算,简单概括就是...
  • 20. 图像的按位运算 函数 cv2.bitwise 提供了图像的位运算,对图像的像素点值位操作,快速高效、方便灵活。 函数说明: cv.bitwise_and(src1, src2[, dst[, mask]] → dst # 位操作: cv.bitwise_or(src1, src2...
  • 本软件用于计算已知变量的位运算。输入已知变量值数一、数二,选择正确的变量类型或计算方法(位或、位异或等),点击计算按钮,可求出其2进制、16进制、10进制的计算结果。1)“”运算:记作and运算...
  • )参加运算的两个数据,二进制进行“运算运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;即:两同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 ...
  • c语言的位运算符怎么操作!?答案:2信息版本:手机版解决时间 2019-10-06 03:32已解决2019-10-05 10:30就是&...最佳答案2019-10-05 11:33位运算在很多系统程序中常要求在位(bit)一级进行运算...
  • Python运算符优先级:以下表格列出了从最高到最低优先级的所有运算符:运算符描述**指数 (最高优先级)~ + -按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)* / % //乘,除,取模和取整除+ -加法减法>...
  • 1.位运算概念: 位运算符主要位对每个二进制位(bit)进行运算,其操作数和运算结果都是整数型.即只能对 byte,short,char,int,long 进行运算. 2.Java语言中位运算分为:位逻辑运算符和位移运算符两类. 3.在java当中,...
  • 按位取反运算

    2020-12-30 16:27:30
    按照我平时的理解,当我使用按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个进行取反计算,取反后所得到的值就是按位取反的运算结果(这点没问题) 例如,假如我的计算机是32的,我接下来要...
  • C语言 按位异或运算

    2021-11-08 18:42:54
    按位异或运算: 规律:无论0或1,异或1取反,异或0不变 变量交换: 题一:给定两个数 a 和 b ,用异或运算交换它们的值。 思路: 1)中间量t = a^b 2) b = tb,相当于abb,根据异或性质知道ab^b = a,所以b = t^b就是b...
  • C语言学习笔记_位运算知识点记录基本位运算按:全1为1,见0为0;1相与无变化,0相与变为0;可用于特定位清零位或:见1为1,全0为0;1相或变为1,0相或无变化;可用于特定位置1异或:相同为0,不同为1...
  • 位运算-秦斌的博客-51CTO博客

    千次阅读 2020-12-22 08:22:24
    1.位运算介绍程序中的所有... : |:位或^:位异或~:位取反<>>:右移,左侧补符号位>>>:右移,左侧补03.应用3.1 Excel表格问题在Excel中,用A表示第1列,B表示第2列......Z表示第2...
  • Mysql 查询—按位运算

    2021-02-05 04:58:06
    整个事情其实使这样的,最近的项目中,有一个表,最终是这样的:一共3,每一的取值是1和0(额,后来还有2,哈哈哈),1代表已认证,0代表未认证。 当时为什么这么设计呢,是因为会高频率的出现 XXX 身份....
  • 逻辑运算是一种非常重要的运算方式,图像处理过程中经常要按照进行逻辑运算,OpenCV中常见的按位逻辑运算函数如下表: 函数名 基本含义 cv2.bitwise_and() 按位与 cv2.bitwise_or() 按位或 cv2....
  • 位运算是指二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,intlong类型。C语言提供的位...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 738,225
精华内容 295,290
关键字:

按位与运算