位运算可对变量中的个别位进行操作,您可能对这样做的原因感到奇怪,这种能力有时确实是必须的,或者至少是有用的。

位运算符可以分为两大类:1、位逻辑运算符;2、移位运算符

1、位逻辑运算符:

位运算符用于整型数据,包括char。讲这些位运算符作为位运算的的原因是:他们对每位进行操作而不影响左右两位的值。注意:请不要将位逻辑运算符与常规的逻辑运算符(&&、||、!)混用,常规的逻辑运算符是对整个值进行操作。

按位取反(~):是一元运算符,是将每个0变为1,将每个1变为0,如下例子:

int a=7

a=0000 0111

int b=~a;//进行按位取反得到的是这个数的原码,在计算机中数值一律由补码进行存储

b=1111 1000 //原码

1000 0111//反码

1000 1000//补码=-8

对b的原码进行反码、补码操作后,可得到b=-8;

原码如何转换成反码、补码(这里对原码、反码、补码进行详细讲解)

运行结果:

位与(&):二元运算符,通过对两个操作数逐位进行比较产生一个新值;对于每个位,只有两个操作数的对应为都为1时结果才为1,否则为0。

int a=7;

a=0000 0111

int b=12;

b=0000 1100

int c=a&b;

c=0000 0100;//c=4

运行结果:

位或(|):二元运算符,通过对两个操作数逐一进行比较产生一个新值;对于每个位,只要有一个操作数的位是1,结果就是1,否者为0。

int a=7;

a=0000 0111

int b=12;

b=0000 1100

int c=a|b;

c=0000 1111;//c=15

运行结果:

位异或(^):二元运算符^,通过对两个逐位进行比较产生一个新值;如果操作数中的对应位有一个是1时那么结果为1,否则为0(两个0,两个1);

int a=7;

a=0000 0111

int b=12;

b=0000 1100

int  c=a^b;

c=0000 1011;//c=11

运行结果:

2、移位运算符:

以为运算符将位向左或向右移动,同样我们仍将用二进制的形式来说明该机制的工作原理。

左移(<<):

左移运算符<<将其左侧操作数的值的每位向左移动,移动的位数由其右侧操作数决定。空出来的位用0填充,并且丢弃移出左侧操作数末端的位。

int a=1;

a=0000 0001

b=a<<1;//使a向左移一位

b=0000 0010//b=2

总结:左移一位相当于原来的乘2

运行结果:

右移(>>):

右移操作符>>将其右侧操作数的值的每位向右移动,移动的位数由其右侧操作数决定。对于unsigned类型,使用0填充左端空出的位。对于有符号类型,结果依赖于机器,空出的位可能用0填充,或者使用符号位(最左端)的副本填充。

int a=2;

a=0000 0010

int b=a>>1;//使a向左移一位

b=0000 0001//b=1;

总结:右移一位相当于原来的值除以2;

运行结果:

移位运算符的优点:能够提供快捷、高效对2的幂的乘法和除法;

number << n

number乘以2的n次幂

number >> n

如果number非负,则用number除以2的n次幂

位运算符:按位取反(~)、位与()、位或(|)、位异或(^);左移运算符(<<)、右移运算符(>>)相关推荐

  1. Python教程:异或运算符(^)、与运算符()、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)

    1.异或的含义 异或运算与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真.转化为命题,就是:"两者的值不同."或"有且仅有一个为 ...

  2. 位与,位或,位异或运算符的理解

    1.位与符号是& 真值表达式为: 1&1=1,1&0=0,0&1=0,0&0=0 记忆方式:&& 我们很容易理解..其实就是真真才为真,相当于& ...

  3. 左移和右移运算符的重载问题(里面的绝对盲点)在做了一遍,还是出错了

    #include <iostream> //实现左移和右移的重载. using namespace std;class A { public:friend ostream operator ...

  4. 位运算总结(按位与,或,异或)

    按位与运算符(&) 参加运算的两个数据,按二进制位进行"与"运算. 运算规则:0&0=0;  0&1=0;   1&0=0;    1&1= ...

  5. 位运算符:按位与(),按位或(|),按位异或(^),取反(~)左移()和右移()

    数据在内存中是以二进制的形式存放的,计算机存储数据的最小单位是位(bit),一个二进制位可以表示两种状态(0和1),一个字节通常由8位二进制位组成.C语言支持按位运算,按位运算也就是对字节或者字中的实 ...

  6. 位运算(按位与 、按位或、按位异或、取反、左移右移)

    位运算 与(&) 0&0=0 0&1=0 1&0=0 1&1=1 或(|) 0|0=0 0|1=1 1|0=1 1|1=1 异或(^) 0^0=0 0^1=1 ...

  7. 位运算(按位与、按位或|、按位异或^) 运算规则与实例

    位运算(按位与.按位或.按位异或) 按位与运算符(&) 参加运算的两个数,按二进制位进行"与"运算. 运算规则:同为1,结果为1,否则为0,即 0 & 0= 0 , ...

  8. 位运算:按位与、按位或、按位异或、按位非(补码 反码)

    原码 补码 反码 计算机中的符号数有三种表示方法:原码.补码.反码.这三种表示方法都由符号位和数值位两部分组成,符号位1表示负数,0表示正数. 二进制数在内存中是以补码的形式存放的.为了更好理解计算机 ...

  9. Java位运算(按位与、按位或、异或)

    一.位运算 位即二进制位或bit位 所有运算到计算中底层中都会变成位运算,位运算可以提高程序的效率,而且我们在研究JDK或者某个框架的源码时,会发现很多地方都用到了位运算! 例如我们在对数组进行排序时 ...

最新文章

  1. mysql查看修改记录_(转)MySql中监视增删改查和查看日志记录
  2. Arch Linux PDF格式文件无法显示中文
  3. 通过浏览器navigator判断浏览器版本或者手机类型判断微信访问
  4. python基础知识整理-Python 重点知识整理(基于Python学习手册第四版)
  5. CTFshow php特性 web139
  6. 【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)
  7. Android https通信问题
  8. 移动支付到底有多美?
  9. poi 获取删除线_Houdini 删除相机看不到的点背面的点或面
  10. 基于热传导方程的高温作业专用服装设计(一)
  11. pyecharts绘制K线
  12. 兰州大学第一届『飞马杯』程序设计竞赛
  13. table 表格合并
  14. VS2017卡在登录界面问题
  15. dhrystone测试前系统软件准备与计算
  16. 中国电信光猫路由模式端口映射问题记录
  17. 解压chm后由hhc生成html索引页面
  18. 焦虑,不知所措,努力应对,坦然,双非本硕求职算法的故事
  19. Leetcode 577
  20. 软件测试人员易遗漏的一些隐藏缺陷

热门文章

  1. w10 保护你的计算机,win10smartscreen筛选器怎么关闭-“windows已保护你的电脑”的关闭方法 - 河东软件园...
  2. 直播报名|美团技术沙龙:美团算法实践——搜索、广告、推荐专场
  3. 网络安全工程师要学习哪些编程语言?哪里学网络安全知识可靠?
  4. Linux有多重要?到底该如何学习Linux?
  5. 关于CMNET和CMWAP联网实践
  6. 传Snapchat母公司Snap拟于3月在纽交所IPO上市
  7. C#中服务器端以太网通讯(一对一)
  8. 离散数学——基本等价式、基本蕴含式
  9. 我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效
  10. 去除 csv 文件中的重复行