前言
在上一篇文章中,我們介紹了&
運算子的基礎用法,本篇文章,我們將介紹&
運算子的一些高階用法。
一、人物簡介
- 第一位閃亮登場,有請今後會一直教我們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的冪次方。
在下一篇文章中,我們將介紹位運算子|
的幾個高階用法。