C++primer学习笔记-----4.8位运算符

【位运算符(优先级由上到下递减)(左结合律):

~expr // 位求反
expr1 << expr2 // 左移,返回左侧值的二进制形式左移右侧个位的拷贝(右移同理)
expr1 & expr2 // 位与,对应位依次进行相与运算,并返回运算结果。与(&&)注意区分
expr1 ^ expr2 // 位异或,对应位依次进行异或运算(异1同0),并返回运算结果
expr1 | expr2 // 位或,对应位依次进行或运算,并返回运算结果,与(||)注意区分
对于左移和右移运算符,右侧的运算对象一定不能为负,而且值必须严格小于结果的位数。】


【位运算符作用于整数类型的运算对象,并把运算对象看成是二进制位的集合。

17.2节将要介绍,一种名为bitset 的标准库类型也可以表示任意大小的二进制位集合,所以位运算符同样能用于bitset 类型。】


位运算符不改变处理对象,只是将处理对象处理后的拷贝作为返回值,类似之前的toupper() 函数。

一般来说,如果运算对象是“小整形”,则它的值会被自动提升成较大的整数类型

如果运算对象是带符号的且值为负,则位运算符对其的处理依赖与机器(编码方式),所以一般位运算符通常只用于处理无符号类型。】


【当希望使用数据表示对象的两种不同状态时,使用位及位运算符可以有效地节省空间(时间能节省么?)

unsigned long w = 0; // int 只能确保占16位(机器不同),long可确保至少占32位
w |= 1UL << 27; // 将w 的第28 位置1,其他位不变
w &= ~(1UL << 27); // 将w 的第28位置0,其他位不变
bool status = w & (1UL << 27); // 使用status 拷贝w 的第28位的状态
以上的例子说明了如何 运用位或和位与,来实现控制某些无关位状态不变,将相关位置为所需数值的方法。】


【IO 操作中使用的实际上是左移和右移的重载版本,由此我们可得知移位运算符满足左结合律

移位运算符的优先级不高不低:比算数运算符的优先级低(输出算术式时不需另加括号,十分方便);但比关系运算符、赋值运算符和条件运算符的优先级高。】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值