C語言中位運算符的高級用法(1)

2023-08-22 12:18:08 來源:知微之見


(相關資料圖)

前言

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

一、人物簡介

第一位閃亮登場,有請今后會一直教我們C語言的老師 —— 自在。第二位上場的是和我們一起學習的小白程序猿 —— 逍遙。

二、位掩碼

位掩碼是一種用于按位操作的技術它通過使用一個二進制數(掩碼)來屏蔽或保留目標數中的一些特定位例如,如果要將一個無符號整數的最高位清零,可以使用以下代碼:
#include < stdio.h >int main(){   unsigned int x = 0xABCD1234; //0b10101011110011010001001000110100 x &= ~(1U < < 31);     printf("x = %un",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,其他位都為1x & (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的冪次方。

在下一篇文章中,我們將介紹位運算符|的幾個高級用法。

標簽:

上一篇:C語言中位運算符的高級用法(2)
下一篇:最后一頁