前言
在上一篇文章中,我們介紹了&
運(yùn)算符的基礎(chǔ)用法,本篇文章,我們將介紹&
運(yùn)算符的一些高級(jí)用法。
一、人物簡介
- 第一位閃亮登場,有請今后會(huì)一直教我們C語言的老師 —— 自在。
- 第二位上場的是和我們一起學(xué)習(xí)的小白程序猿 —— 逍遙。
二、位掩碼
-
位掩碼是一種用于按位操作的技術(shù)
-
它通過使用一個(gè)二進(jìn)制數(shù)(掩碼)來屏蔽或保留目標(biāo)數(shù)中的一些特定位
-
例如,如果要將一個(gè)無符號(hào)整數(shù)的最高位清零,可以使用以下代碼:
#include <stdio.h>
int main()
{
unsigned int x = 0xABCD1234; //0b10101011110011010001001000110100
x &= ~(1U << 31);
printf("x = %u\n",x);
return 0;
}
-
1U << 31
表示將一個(gè)無符號(hào)整數(shù)的最高位設(shè)置為1
-
~(1U << 31)
取反得到掩碼,再和原數(shù)進(jìn)行按位與運(yùn)算,就可以將最高位清零
三、判斷奇偶性
二進(jìn)制末尾位 | |
---|---|
奇數(shù) | 1 |
偶數(shù) | 0 |
- 一個(gè)數(shù)的二進(jìn)制表示中,如果最后一位為 1,則它是奇數(shù),否則它是偶數(shù)
- 因此,可以使用 & 運(yùn)算符來判斷一個(gè)數(shù)的奇偶性,例如:
#include <stdio.h>
int main()
{
int x = 7;
if (x & 1)
{
printf("%d 是奇數(shù)\n", x);
}
else
{
printf("%d 是偶數(shù)\n", x);
}
return 0;
}
- x & 1 將返回 x 的最后一位與 1 的按位與
- 如果結(jié)果為 1,說明 x 是奇數(shù),否則 x 是偶數(shù)。
四、判斷是否為 2 的冪次方
- 如果一個(gè)數(shù)是 2 的冪次方,那么它的二進(jìn)制表示中,只有最高位為 1,其他位都為 0
- 把這個(gè)數(shù)減去1,那么它的二進(jìn)制表示中,最高位為 0,其他位都為1
-
x & (x - 1)
的結(jié)果一定為 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;
}
小結(jié)
通過這篇文章,我們學(xué)會(huì)了用位運(yùn)算符&來做位掩碼操作、判斷奇偶性、判斷一個(gè)數(shù)是否為2的冪次方。文章來源:http://www.zghlxwxcb.cn/news/detail-409728.html
在下一篇文章中,我們將介紹位運(yùn)算符|
的幾個(gè)高級(jí)用法。文章來源地址http://www.zghlxwxcb.cn/news/detail-409728.html
到了這里,關(guān)于逍遙自在學(xué)C語言 | 位運(yùn)算符&的高級(jí)用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!