C语言中位运算符的高级用法(1)

嵌入式技术

1335人已加入

描述

前言

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

C语言

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。
  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、位掩码

  • 位掩码是一种用于按位操作的技术
  • 它通过使用一个二进制数(掩码)来屏蔽或保留目标数中的一些特定位
  • 例如,如果要将一个无符号整数的最高位清零,可以使用以下代码:
#include < stdio.h >

int main()
{  
 unsigned int x = 0xABCD1234; //0b10101011110011010001001000110100
 x &= ~(1U < < 31);
 
    printf("x = %un",x);
 return 0;
}
  • 1U << 31 表示将一个无符号整数的最高位设置为 1
  • ~(1U << 31)取反得到掩码,再和原数进行按位与运算,就可以将最高位清零

C语言

三、判断奇偶性

二进制末尾位
奇数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 是偶数。

C语言

四、判断是否为 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;
}

C语言

小结

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

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分