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


    前言

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

    一、人物简介

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

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

    二、位掩码

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

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

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

    #include 
    
    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 
    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 
    int main()
    {
        unsigned int x = 16;
        if (!(x & (x - 1))) 
        {
            printf("%u 是 2 的幂次方\n", x);
        } 
        else 
        {
            printf("%u 不是 2 的幂次方\n", x);
        }
        return 0;
    }
    

    小结

    通过这篇文章,我们学会了用位运算符&来做位掩码操作、判断奇偶性、判断一个数是否为2的幂次方。

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

  • 相关阅读:
    阿里云刘洋:基于eBPF的Kubernetes可观测最佳实践
    Prompt Engineering,提示工程
    Flink 源码解读系列 DataStream 时间服务管理器 TimeServiceManager 设计与实现
    ​美元兑加元价格分析:空头按兵不动 寻求展开大幅整理
    【优化算法】一种新的数据聚类启发式优化方法——黑洞算法(基于Matlab代码实现)
    MongoDB升级步骤
    Java 与 Go:可变数组
    前端策略模式:react hooks 表单验证
    Allegro 172版本自动放置层叠
    浅谈云原生Cloud Native
  • 原文地址:https://www.cnblogs.com/Wayne123/p/17303768.html