C语言位运算符
整数类型的位模式由一队按位置从右到左编号的位组成,位置编号从 0 开始,这是最低有效位(least significant bit)。例如,考虑字符值*,它的ASCII编码为 42,相当于二进制的 101010:
在本例中,值 101010 被表示成一个 8 位的字节内容,因此前面多两个 0。布尔位运算符表 1 中列举的运算符可以对操作数的每个位进行布尔运算。这种二元运算符把两个不同操作数内相同位置的位关联起来。被设定的位(也就是值为 1 的位)被解释为 true,被清除的位(也就是值为 0 的位)被解释为 false。
除布尔运算符 AND、OR 和 NOT 以外,也有位异或运算符(exclusive-OR,XOR)。这些都在表 1 进行了列举。
位运算符的操作数必须是整数类型,并且遵循寻常算术转换(usualarithmetic conversion)。转换后获得的操作数通用类型就是整个计算结果的类型。表 2 展示了这些运算符的效果。
可以将一个整数 a 的特定位清除,做法是将整数 a 和另一个整数进行位 AND 运算,其中,另一个整数在需要清除的位为 0,其他位则为 1,并位 AND 运算,其中,另一个整数在需要清除的位为 0,其他位则为 1,并将 AND 运算的结果赋值给整数 a。
该另一个整数,即位 AND 运算的第二个操作数,被设定为 1 的位置(称为位掩码),这些位置经过位 AND 运算,不会改变第一个操作数对应位置的值。例如,一个整数与一个位掩码 0xFF 进行位 AND 运算后,将保留最低位置的 8 个位,而会清除其他所有位的值:a // 相当于:a = a
在该示例中,复合赋值运算符 &= 也会执行 & 运算。复合赋值运算符与其他二元位运算符具有类似的执行方式,这里不再赘述。
位运算符也可以用来生成位掩码,以供以后的位运算使用。例如,在位模式 0x20 中,只有位5被设定。因此表达式 ~0x20 会生成一个只有位 5 没有被设定的位掩码:a // 清除a中的位5位掩码 ~0x20 比 0xFFFFFFDF 更受欢迎,因为它的可移植性更好:结果不会受到机器字大小的影响(同时也更方便人阅读)。
第二个转换使用相同的位掩码,它会将第一次转换的结果再反转一次。换句话说,b^mask^mask 会得到原来 b 的值。这个操作可以用于交换两个整数的值,而不需要使用第三个临时变量:a ^= b; // 等效于 a = a ^ b; b ^= a; // 将a原来的值赋值给b a ^= b; // 将b原来的值赋值给a
本例中的前两个表达式等同于 b=b^(a^b)或 b=(a^b)^b。其结果等同于 b=a,副作用是 a 的值也被修改了,其修改后的值为 a^b。在这时,第三个表达式具有如下副作用 a=(a^b)^a 或 a=b(使用 a 和 b 的原始值)。移位运算符移位运算符将左操作数的位模式移动数个位置,至于移动几个位置,由右操作数指定。它们如表 3 列举。
移位运算符的操作数必须是整数。在实际移位操作之前,两个操作数都要进行整数提升(promotion)。右边操作数不可以为负值,并且必须少于左边操作数在整数提升之后的位长。如果不符合这些条件,程序运行结果将无法确定。
在向左移位运算时,右边多出来的位用 0 来填充。移动超出左边边界的位则直接抛弃。向左移动 y 个位置,就等同于将左操作数乘以 2^{y}:如果左操作数 x 是无符号类型,那么表达式 xy 的结果等于表达式 x×2^{y} 的值。因此,在前面的例子,n2 的值为 n×4,也就是 44。
移位运算符的优先级比算术运算符的优先级更低,但相对于比较运算符以及其他的位操作运算符,具有更高的优先级。上例表达式 mask(1p)中的括号必要性不大,主要是让程序代码更容易阅读。
相关文章:
- [军事新闻]卷帘绿魔易爆点这是个什么梗?
- [军事新闻]关于生生世世只爱你到底怎么回
- [军事新闻]山东大鼓老来难真的假的?
- [军事新闻]不倒翁摩托车网友怎么看?
- [军事新闻]范冰冰周渝民到底是什么情况?
- [军事新闻]关于现代新雅尊详情介绍!
- [军事新闻]有关木管组有什么乐器背后的逻
- [军事新闻]黄光裕得罪了谁具体内容是什么
- [军事新闻]重阳节的来历和习俗是什么原因
- [军事新闻]有关再就业优惠证到底是什么情
- [军事新闻]穷小子的超级成长怎么回事?
- [军事新闻]关于恶魔总裁求你别碰我究竟是
- [军事新闻]关于春心莫共花争发下一句是怎
- [军事新闻]有关青盲剧情介绍网友怎么看?
- [军事新闻]情逆三世缘剧情介绍真的还是假
- [军事新闻]有关罗百吉好听的歌网友是怎么
- [军事新闻]我可以摸你的胸吗具体内容!
- [军事新闻]有关真爱百万新娘第二部究竟什
- [军事新闻]有关歌兰蒂斯的谢礼究竟什么原
- [军事新闻]上党落子灵堂计具体情况是什么
- 青海小西牛生物乳业股份有限公司
- 值得但非首选]雷克萨斯NX200t两年详细使用感受
- 斧头男大砍麦当劳事后操作更令人脊背发凉
- 改装档案BMW R nine T真是怎么改都好看!看看印度改出
- 华为美国子公司计划大规模裁员 中国雇员可回国并留在
- 加盟商百万欠款难追回 鱼乐贝贝“加盟圈套”何时终结
- 易方达天天理财货币A
- 有关五行带土的字的底层逻辑是什么?
- b是什么车标
- 关于魔少的逃跑俏新娘又是什么梗?
- 第七届中国-亚欧博览会透露哪些积极信号?
- 美格智能技术股份有限公司第二届监事会第十次会议决议
- ROG6天玑版成安卓旗舰手机性能第一?真实用户评价亮了
- 湖北奥运冠军谌龙喜获赛季首冠 感叹坚持终于有了回报
- 1~8月南通全市工业投资稳健增长 亿元以上工业项目产出
- 淘宝分期付款(淘宝上如何分
- 面瘫将军求子记具体内容是什么?
- 【雄关善治·五治融合】“五治融合”绘就和谐画卷——
- 4080显卡需要多少w电源笔记本什么时候出?
- 唇唇欲动无影有踪是真的吗?
- 人均一块金牌C-ECAP中国生态汽车评价规程有点尬|聚侃
- 宣城街头隔离栏开口变
- 儒博荣获AI+垂直行业最具投资价值奖坚定以AI赋能教育
- 鞍山繁荣夜经济释放经济增长新动能
- 万方医学网-医学专业信息服务提供商
- 刘安现磨豆浆网友会怎么评论?
- 金迈驰节油器这又是个什么梗?
- 习近平:在第十三届全国人民代表大会第一次会议上的讲
- 有关祁对症下药(duì zhèng xià yào)网友关心什么
- 关于充气娃娃之恋qvod这是个什么梗?
- 失宠少奶奶具体内容是什么?
- 深化增值税改革首月减税超千亿制造业居首
- “祖国昌盛七十春 书画公益展新篇” 筑梦大爱路翰墨笔
- 182个大棚被大风摧毁 部分兰考蜜瓜急等您品尝
- 【逗号游戏解说】我的世界Minecraft纯零生存第一季4│
- 霍顿开口了:队友服用禁药让我失望支持对她禁赛
- 维瓦尔第四季最新消息!
- 咬洱(ěr)千秋万代真的假的?
- 诛仙月宫祝福具体内容!
- 《破冰行动》“烂尾” 豆瓣评分跌至74导演道歉