第四章_表达式_4.8 位运算符

4.8 位运算符

4.8 位运算符

位运算符作用于整数类型的运算对象,并把运算对象看成是二进制位的集合。位运算符提供检查和设置二进制位的功能。
4.3_位运算符(左结合律)

  • 如果运算对象是“小整型”,则它的值会被自动提升成较大的整数类型
  • 运算对象可以是带符号的,也可以是无符号的。如果运算对象是带符号的且它的值为负,那么位运算符如何处理运算对象的“符号位”依赖于机器;而且,此时的左移操作可能会改变符号位的值,因此是一种未定义的行为。

移位运算符

左移运算符<<在右侧插入值为 0 的二进制位;

右移运算符>>的行为则依赖于其左侧运算对象的类型:如果该运算对象是无符号类型,在左侧插入值为 0 的二进制位;如果该运算对象是带符号类型的,在左侧插入符号位的副本或值为 0 的二进制位,如何选择视具体环境而定。

位求反运算符

将运算对象逐位求反后生成一个新值。

位与、位或、位异或运算符

位与运算符&:如果两个运算对象的对应位置都是 1 则运算结果中该位为 1,否则为 0;

位或运算符|:如果两个运算对象的对应位置至少有一个为 1 则运算结果中该位为 1,否则为 0;

位异或运算符^:如果两个运算对象的对应位置有且只有一个为 1 则运算结果中该位为 1,否则为 0;

使用位运算符

unsigned long quizl = 0;
quizl |= 1UL << 27;		// 表示学生 27 通过了测验
quizl &= ~(1UL << 27);	// 表示学生 27 没有通过测验
bool status = quizl & (1UL << 27);	// 学生 27 是否通过了测验

移位运算符(又叫 IO 运算符)满足左结合律

移位运算符的优先级介于中间:比算术运算符的优先级低,但比关系运算符的、赋值运算符和条件运算符的优先级高。因此在一次使用多个运算符时,有必要在适当的地方加上括号使其满足我们的要求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值