逍遙自在學C語言 | 位運算符&的高級用法
前言
在上一篇文章中,我們介紹了&運算符的基礎用法,本篇文章,我們將介紹& 運算符的一些高級用法。

一、人物簡介
- 第一位閃亮登場,有請今后會一直教我們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的冪次方。
在下一篇文章中,我們將介紹位運算符|的幾個高級用法。

浙公網安備 33010602011771號