前言
在上一篇文章中,我們介紹了&運算子的基礎用法,本篇文章,我們將介紹& 運算子的一些高級用法,

一、人物簡介
- 第一位閃亮登場,有請今后會一直教我們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的冪次方,
在下一篇文章中,我們將介紹位運算子|的幾個高級用法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/549626.html
標籤:其他
