前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++中位运算操作符的使用

C/C++中位运算操作符的使用

作者头像
跋扈洋
发布2022-04-27 20:19:34
5340
发布2022-04-27 20:19:34
举报
文章被收录于专栏:物联网知识物联网知识

介绍

操作符

功能

&

位逻辑与

l

位逻辑或

^

位逻辑异或

~

取反运算符

使用

“与”运算符

与运算符的功能是使参与运算的两数各对应的二进制位相“与”,当对应的两个二进制位均为1时,结果为1,否则,均为0。

代码语言:javascript
复制
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    int a=18;   //0001 0010
    int b=23;   //0001 0111
    int c;
    c=a&b;      //0001 0010
    cout<<c<<endl;
    system("pause");
    return 0;
}

计算过程: 二进制 :十进制 0001 0010 :18 0001 0111 :23 0001 0010 :18 通过上面的运算会发现按位“与”的一个用途是清0.要将原数中为1的位置为0,只需要使其与另一个对应位置为0的数相“与”即可。 比如我们想让1010 1010中的最高位清0,那么我们就可以让他和0111 1111相“与”。

“或”运算符

或运算符“|”的功能是使参与运算的两个数各对应的二进制位相“或”,只要对应的两个二进制位有一个为“1”,结果位就为1。 如果想要将一个二进制位数的某几位设置为1,只需将该数与一个这几位都是1的二进制数执行“或”操作即可。 11010 01110 ——— 11110

代码语言:javascript
复制
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    int a=18;   //0001 0010
    int b=23;   //0001 0111
    int c;
    c=a|b;      //0001 0111
    cout<<c<<endl;
    system("pause");
    return 0;
}

“取反操作”

“取反”运算符“~”具有右结合性,其功能是对参与运算的数的各二进制位按位求反。 ~01 0101=10 1010 注:对一个数取反并不是对这个数取相反数,即~21不等于-21。 在计算机中,负数以其正值的补码形式表达。 101010=1 10101+1=1 10110=-22

代码语言:javascript
复制
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    int a=21;   
    int b=23;   
    int c;
    c=~a;     
    cout<<c<<endl;
    printf("%x\n",c);
    system("pause");
    return 0;
}

“异或”运算符

异或运算符“^”的功能是使参与运算的两数各对应的二进制位相“异或”,当对应的两个二进位数相异时为1,否则结果为0。 “异或”操作的一个主要用途就是能使特定的位翻转,如果要将一个数的后7位翻转只需要与一个后7位都是1的数进行“异或”操作即可。 “异或”操作的另一个主要用途,就是在不使用临时变量的情况下实现两个变量值的互换。 eg:x=21,y=23 x=x^y; y=y^x; x=x^y;

代码语言:javascript
复制
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    int a=21;  
    int b=23;   
    cout<<"a="<<a<<"\n"<<"b="<<b<<endl;
    a=a^b;
    cout<<"a="<<a<<endl;
    b=b^a;
    cout<<"b=="<<b<<endl;
    a=a^b;
    cout<<"a="<<a<<endl;
    system("pause");
    return 0;
}

"左移"运算符

“左移”运算符“<<”的功能是把“<<”左边的运算数的各二进制位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。 实际上左移一位相当于该数乘以2,左移两位相当于乘以4,但这种情况只限于移出位不含1的情况。

代码语言:javascript
复制
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
    int a=15;  
    int b=23;   
    cout<<"a="<<a<<"\n"<<"b="<<b<<endl;
    a=15<<1;
    cout<<"a<<1="<<a<<endl;
    a=15<<2;
    cout<<"a<<2="<<a<<endl;
    a=15<<3;
    cout<<"a<<3="<<a<<endl;
    system("pause");
    return 0;
}

“右移”运算符

“右移”运算符“>>”的功能是把“>>”左边的运算数的各二进制位全部右移若干位,由“>>”右边的数指定移动的位数。 在进行右移时对于有符号数需要注意符号位问题,当为正数时,最高位补0;当为负数时,最高位是补0还是补1取决于编译系统的规定。移入0的称为“逻辑右移”,移入1的称为“算术右移”。

循环移位

循环移位就是将要移出的低位放到该数的高位或者将移出的高位放到该数的低位。 循环左移的过程如下:

  1. 将x的左端n位先放到z中的低n位中, z=x>>(32-n);
  2. 将x左移n位,其右边低n位补0. y=x<<n;
  3. 将y与z进行按位“或”运算 y=y|z;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 使用
    • “与”运算符
      • “或”运算符
        • “取反操作”
          • “异或”运算符
            • "左移"运算符
              • “右移”运算符
                • 循环移位
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档