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

  • 介绍
  • 使用
    • “与”运算符
    • “或”运算符
    • “取反操作”
    • “异或”运算符
    • "左移"运算符
    • “右移”运算符
    • 循环移位
  • 后续

介绍

操作符 功能
& 位逻辑与
l 位逻辑或
^ 位逻辑异或
~ 取反运算符

使用

“与”运算符

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

#include <iostream>
#include <windows.h>
using namespace std;
int main()
{int a=18;   //0001 0010int b=23;   //0001 0111int c;c=a&b;      //0001 0010cout<<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

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

“取反操作”

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

#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;

#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的情况。

#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;

后续

如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。
或者关注公众号。

编写不易,感谢支持。

C/C++中位运算操作符的使用相关推荐

  1. 算法之美 | 位运算的巧妙奥秘(一) | JAVA中位运算的深入浅出

    文章目录 前言 一.位运算符号 二.位运算的运算规则 扩展 前言 传智杯初赛后有感而写,我目前阶段所学习的算法,只是最基础的数学,对于数字和数学公式还是不敏感,在小卡与质数2那道题,解题的思路只有最基 ...

  2. c语言中位运算之布尔运算

    c语言中位运算中的布尔运算有:&.|.~.^ &:按位与 |:按位或 ~:按位非 ^:按位异或,相同为0,相异为1. 计算规则如下: 位的逻辑运算的作用: 使用位向量做集合编码: 使用 ...

  3. java中位运算详解

    位运算 什么是位操作? 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算就是直接对整数在内存中的二进制位进行操作.比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算 ...

  4. java 枚举 或运算_Objective-C 枚举 中位运算 的使用

    前言 Enum,也就是枚举,从C语言开始就有了,C++.Java.Objective-C.Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个--规范的定义代码中的状态. ...

  5. c语言或者cpp中位运算的技巧

    简述 在知乎上看到一个题目,解答很有意思,用的是位运算. 这让我觉得位运算有更多的算法可能,但是却还没被我用过. 这种东西都是第一次看,觉得挺牛的,第二次,第三次看的时候就觉得没什么了.So,大佬们轻 ...

  6. c语言位运算负数的实例_一招教你学会C语言中位运算

    程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.注意,位运算只针对于整数进行操作. 运算符号 运算规则 1.&与运算:对应两个二进 ...

  7. 计算机中位运算的一些性质与技巧

    目录 一.位运算总共有5总运算: 二.每种运算都有相应的性质: 三.位运算基础上扩展的一些解法 在实际中,由于计算机采用的是二进制存储,所以关于位运算的操作能够实现并简化很多复杂问题. 一.位运算总共 ...

  8. php位运算符与逻辑运算_位运算符及PHP中位运算的应用笔记

    一.逻辑运算符 正式说位运算符之前,先简单提一下逻辑运算符.分3个角度: 0.数学上 记得高中数学讨论复合命题的时候,使用过基本的逻辑运算符 "非"(¬)."与" ...

  9. 按位运算操作符底层实现原理

    本篇文章给大家讲解编程软件中的运算符底层实现原理! 1.按位与运算& 按位与运算的底层运算过程如下 十进制: 3&5=1 二进制 0011&0101 = 0001 按位与运算就 ...

最新文章

  1. python创建一个txt文件-python新建txt文件,并逐行写入数据
  2. 转]SQLServerDBA十大必备工具
  3. MyEclipse配色字体等配置的解决方案
  4. [翻译]SharePoint2007中创建Forms认证方式的站点
  5. ISO9000标准简介
  6. Windows 10出现0x8000ffff错误应该如何解决?
  7. 机器翻译模型简介(一)
  8. gitter 卸载_最佳Gitter渠道:硬件,物联网和机器人技术
  9. 峰值速率、系统容量、吞吐量、带宽之间的区别
  10. Ubuntu16.04装拼音/Sogou遇到的问题(卸载/重装 Fcitx / Fcitx Configuration、卸载/重装Sogou)
  11. 计算机编辑字块教学ppt,文字处理与编辑排版.ppt
  12. 【PMAC】Chapter4:PMAC的C#开发
  13. JS三板斧——流程控制
  14. 【Tableau 图表大全1.0】之条形图
  15. java原理之反射机制
  16. 记录:谷歌地图google map api实现基本测距功能
  17. 每周分享第 59 期
  18. 导航条样式代码【代码库】
  19. 探路者战略合作oTMS 布局智慧物流
  20. 输出自新中国成立以来至今所有的闰年年份。

热门文章

  1. 本地项目怎么推送到码云_如何将本地项目放到码云(gitee)上
  2. a*算法matlab代码_MATLAB数学建模算法的代码模板大全
  3. muduo源代码分析--Reactor模式在muduo中的使用
  4. Ubuntu下root密码认证错误
  5. HDU 1788 Chinese remainder theorem again
  6. (收集)vim72 .vimrc的一个样本
  7. vue中v-if指令的使用之Vue知识点归纳(六)
  8. vue中的v-text指令之Vue知识点归纳(二)
  9. java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)
  10. remaining connection slots are reserved for non-replication superuser connections