当前位置: 首页 > news >正文

逍遥自在学C语言 | 位运算符的高级用法

前言

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

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

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

二、位掩码

  • 位掩码是一种用于按位操作的技术

  • 它通过使用一个二进制数(掩码)来屏蔽或保留目标数中的一些特定位

  • 例如,如果要将一个无符号整数的最高位清零,可以使用以下代码:

#include <stdio.h>int main()
{  unsigned int x = 0xABCD1234; //0b10101011110011010001001000110100x &= ~(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的幂次方。

在下一篇文章中,我们将介绍位运算符|的几个高级用法。

📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!

http://www.lryc.cn/news/58532.html

相关文章:

  • Java实现输入行数打印取缔字符,打印金字塔三角形的两个代码程序
  • express项目的创建
  • RK3399平台开发系列讲解(基础篇)Linux 传统间隔定时器
  • Kafka 3.4.0 kraft 集群搭建
  • 微信小程序 iphone14 css mask 使用图片实现遮照 疑似 no-repeat 失效
  • 密码学实践-04
  • SpringBoot整合swagger实现接口管理并设置加密访问
  • C语言单例模式-实现高性能日志管理器
  • Flutter - flutter项目添加 Web 支持
  • 关键词数据分析-搜索词和关键词分析工具
  • SpringCloud微服务技术栈之网关服务Gateway
  • 什么原因导致了儿童自闭症?跟父母养育有关吗?
  • 抽象轻松web
  • 如何获取系统下目录的文件系统类型
  • 【Linux】GCC编译器的使用
  • 浅谈一下socks5协议原理详解与应用场景分析
  • java面试准备17
  • ffmpeg的滤镜
  • springboot项目感受03
  • notion插件:为你的工作流带来新生
  • 【python】Jupyter的使用(python代码编辑器)
  • 面试官:你做过什么有亮点的项目吗?
  • 【华为OD机试真题】猜字谜(javapython)
  • 制作真人手办有哪些不便?怎么解决?
  • 网络安全行业现在好混吗,工资水平怎么样?
  • 【SpringBoot】面试组合技-天羽屠龙舞,SpringBootApplication注解的作用是什么?SpringBoot怎么实现自动装配的?
  • 2023-4-10-用Pthreads计算积分
  • 什么是js?js的基本使用
  • 自然数的拆分问题 字典序
  • 软件测试——概念篇