前言

在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们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语言 | 位运算符&的高级用法的更多相关文章

  1. C语言位运算符:与、或、异或、取反,左移和右移

    C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...

  2. C语言位运算符:与、或、异或、取反、左移和右移

    语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...

  3. Flask - 模板语言jinja2 和render_template高级用法

    目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...

  4. 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍

    转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...

  5. c语言位运算符

    C语言既具有高级语言的特点,又具有低级语言的功能. 所谓位运算是指进行二进制位的运算. C语言提供的位运算: 运算符   含义  &   按位与  |   按位或  ∧   按位异或  ∽   ...

  6. C语言位运算符:与、或、异或、取反、左移与右移详细介绍

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  7. C语言位运算符详解

    原文链接:https://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题 ...

  8. 基础知识复习(一)——C语言位运算符详解

    常用的位运算符:与(&),取反(~),或(|),异或(^),左移(«),右移(») 1. 与(&)操作符,按位与,全为1 时,结果取1 11001 &10011 结果:1000 ...

  9. C语言--位运算符

    一.位运算符 1.按位与:& 1> 功能 * 只有对应的两个二进制位为1时,结果位才为1,否则为0 * 举例:10用二进制表示为1010,  7用二进制表示为0111.对两个数值进行&a ...

  10. C#位运算符的基本用法

    位运算符包括:| 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等. ...

随机推荐

  1. 需要改动node_modules,并且别人也可以同步,插件 patch-package

    patch-package 转自:https://www.cnblogs.com/lovewhatIlove/p/15724812.html 1.简介:有个功能需要修改node_modules里面的代 ...

  2. java-------token

    https://el-admin.vip/guide/hdsc.html#%E6%96%B0%E5%BB%BA%E6%A8%A1%E5%9D%97

  3. jmeter性能测试学习1_配置oracl jdbc连接

    1.导入orcle驱动的jar包 2.添加配置元件选择 JDBC连接配置 3.添加取样器 JDBCrequest 4.添加观察树,运行 配好密码 OK

  4. 基础篇:windows常用命令

    1. windows常用系统命令 cd [进入目录] dir [列出当前目录文件] echo + 打印内容 [打印命令] echo 123 > 1.txt [打印内容到文本] type + 文件 ...

  5. echarts图表自适应屏幕/浏览器窗口大小

    昨天完成echarts柱状图的生成,突然发现在项目中还有个小缺陷,当柱状图完成渲染之后,放大缩小浏览器窗口echarts柱状图宽度没有随之改变. 接昨天的代码做了小调整: setTimeout(fun ...

  6. vim入门与快捷键使用

    1.移动 上下左右 jkhl 2.模式选择 命令模式 插入模式 字符选择模式 3.剪切复制 粘贴:p 复制 y 选择 v 进入选择模式 4. 撤销恢复 撤销 u 恢复 ctrl + r 5. 删除 d ...

  7. centos7离线安装软件和软件包组

    需求: 在一个只有内网的服务器中安装某些需要进行源码编译的软件,并且该软件具有大量的依赖,最坑的是服务器只安装了基本的软件,现在需要手动将Development Tools软件包组安装到该服务器,然后 ...

  8. 多线程JUC练习

    package com.aliyun.test.learn; import java.util.concurrent.*; import java.util.concurrent.locks.Reen ...

  9. 后端004-JWT工具类的编写

    登录功能采用springsecurity安全框架和jwt令牌 首先需要添加依赖信息 在yml中添加JWT的配置文件 有了上述的配置之后,我们可以准备一个JWT的工具类,方便后面和JWT相关的内容去使用 ...

  10. Caused by: java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not found

    Caused by: java.lang.ClassNotFoundException: Class org.openx.data.jsonserde.JsonSerDe not found 解决方法 ...