4

逍遥自在学C语言 | 位运算符&的高级用法 - 知微之见

 1 year ago
source link: https://www.cnblogs.com/Wayne123/p/17303768.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

1511464-20230410174955820-1027843954.png

一、人物简介

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

二、位掩码

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

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

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

#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)取反得到掩码,再和原数进行按位与运算,就可以将最高位清零
1511464-20230410175005190-1036901736.gif

三、判断奇偶性

二进制末尾位
奇数 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 是偶数。
1511464-20230410175017295-2005354118.png

四、判断是否为 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;
}
1511464-20230410175026136-261476818.png

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK