逍遥自在学C语言 | 位运算符&的高级用法
前言
在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法。

一、人物简介
- 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

- 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、位掩码
位掩码是一种用于按位操作的技术
它通过使用一个二进制数(掩码)来屏蔽或保留目标数中的一些特定位
例如,如果要将一个无符号整数的最高位清零,可以使用以下代码:
#include <stdio.h>
int main()
{
unsigned int x = 0xABCD1234; //0b10101011110011010001001000110100
x &= ~(1U << 31);
printf("x = %u\n",x);
return 0;
}
1U << 31表示将一个无符号整数的最高位设置为1~(1U << 31)取反得到掩码,再和原数进行按位与运算,就可以将最高位清零

三、判断奇偶性
| 二进制末尾位 | |
|---|---|
| 奇数 | 1 |
| 偶数 | 0 |
- 一个数的二进制表示中,如果最后一位为 1,则它是奇数,否则它是偶数
- 因此,可以使用 & 运算符来判断一个数的奇偶性,例如:
#include <stdio.h>
int main()
{
int x = 7;
if (x & 1)
{
printf("%d 是奇数\n", x);
}
else
{
printf("%d 是偶数\n", x);
}
return 0;
}
- x & 1 将返回 x 的最后一位与 1 的按位与
- 如果结果为 1,说明 x 是奇数,否则 x 是偶数。

四、判断是否为 2 的幂次方
- 如果一个数是 2 的幂次方,那么它的二进制表示中,只有最高位为 1,其他位都为 0
- 把这个数减去1,那么它的二进制表示中,最高位为 0,其他位都为1
x & (x - 1)的结果一定为 0- 例如,判断16 是否是 2 的幂次方:
#include <stdio.h>
int main()
{
unsigned int x = 16;
if (!(x & (x - 1)))
{
printf("%u 是 2 的幂次方\n", x);
}
else
{
printf("%u 不是 2 的幂次方\n", x);
}
return 0;
}

小结
通过这篇文章,我们学会了用位运算符&来做位掩码操作、判断奇偶性、判断一个数是否为2的幂次方。
在下一篇文章中,我们将介绍位运算符|的几个高级用法。
逍遥自在学C语言 | 位运算符&的高级用法的更多相关文章
- C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- C语言位运算符:与、或、异或、取反、左移和右移
语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...
- Flask - 模板语言jinja2 和render_template高级用法
目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...
- 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍
转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...
- c语言位运算符
C语言既具有高级语言的特点,又具有低级语言的功能. 所谓位运算是指进行二进制位的运算. C语言提供的位运算: 运算符 含义 & 按位与 | 按位或 ∧ 按位异或 ∽ ...
- C语言位运算符:与、或、异或、取反、左移与右移详细介绍
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...
- C语言位运算符详解
原文链接:https://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题 ...
- 基础知识复习(一)——C语言位运算符详解
常用的位运算符:与(&),取反(~),或(|),异或(^),左移(«),右移(») 1. 与(&)操作符,按位与,全为1 时,结果取1 11001 &10011 结果:1000 ...
- C语言--位运算符
一.位运算符 1.按位与:& 1> 功能 * 只有对应的两个二进制位为1时,结果位才为1,否则为0 * 举例:10用二进制表示为1010, 7用二进制表示为0111.对两个数值进行&a ...
- C#位运算符的基本用法
位运算符包括:| 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等. ...
随机推荐
- systick 理解
systick 中断的优先级往往设置为最低值,而不是最高值:如果设置为最低值不会发生上图标号[6]处的情况,设置为最低可能会被其他中断抢占,延长systick的响应时间,但是这个延迟不会累计,因为sy ...
- vue 3.0 引入swiper 8 direction不生效
需要手动给元素高度 <swiper class="my-swiper" :modules="modules" ...
- Q:Win10无法访问共享文件夹。提示此用户无法登录,因为该账户当前已被禁用
问题:当我访问同事电脑共享文件夹时,弹出如下提示框: 可以在命令提示符上ping通对方主机,但是不能访问对方文件夹 尝试解决方法(无效): 1.同时按住win+r打开运行命令框,输入gpedit.ms ...
- idea鼠标光标变黑块
在编辑文档和在编程时经常敲着敲着竖线就变成了黑块,这样输入新的代码就会改变其他代码,这是因为输入方式改成了改写模式 只要按fn+insert就可以解决了 搜索 复制
- 网页返回unicode源码 python解码详细步骤
刚入门python! 记录一下网页返回源码,中文部分被unicode编码,python如何处理 1.先提取编码后的数据(如果不提取正篇源码直接unicode解码,解码方法无法识别) 这个步骤属于逻辑问 ...
- vue-devtools 打开 vscode 可能会报错
据说 99% 的人不知道 vue-devtools 还能直接打开对应组件文件?本文原理揭秘 mac 电脑在 VSCode command + shift + p,Windows 则是 ctrl + s ...
- element ui upload 组件多文件上传,最终只显示上传一个的问题
问题描述:一次选多张图片上传的时候界面上只有一张图片显示,并且上传调用的接口次数与选择的图片数量一致,且接口已200. JSON格式,"url"是最终显示的图片地址 { & ...
- webservice学习随笔(二):通过cxf实现webservice
一:基本概念(可跳过) Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基 ...
- 在win10上装vmware虚拟机+ubuntu一打开就蓝屏重启怎么办?
一般就是虚拟机和系统一些性能不兼容导致的 因为我原来装的版本是15.0的vmware,现在重新装了16的vmware
- 通用图像分割任务- 使用 Mask2Former 和 OneFormer
本文介绍两个领先的图像分割神经网络模型: Mask2Former 和 OneFormer.相关模型已经在 Transformers 提供. Transformers 是一个开源库,提供了很多便捷的先进 ...