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

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


(資料圖片僅供參考)

前言

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

一、人物簡介

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

二、計算2的整數(shù)次冪

代碼示例
#include < stdio.h >int main() {    int x = 1;    printf("請輸入2的次方數(shù):");    scanf("%d",&x);    int y = 1 < < x;     printf("n2的%d次方 = %dn",x,y);    return 0;}
運行結(jié)果

三、將一個字節(jié)序列合并為一個整數(shù)

例如,將4個字節(jié)組成的字節(jié)序列b合并為一個整數(shù)代碼示例
#include < stdio.h >int main() {    unsigned char b[4] = {0x12, 0x34, 0x56, 0x78};    unsigned int x = ((unsigned int)b[0] < < 24) | ((unsigned int)b[1] < < 16) |((unsigned int)b[2] < < 8) | ((unsigned int)b[3]);    printf("合并后的整數(shù) = 0x%08xn", x);    return 0;}
運行結(jié)果

?下面介紹的兩種用法,會用到&``|``^的知識

如果有不清楚的,可以查看之前的文章:位運算符的基礎(chǔ)用法

四、標(biāo)記碼

1、標(biāo)記位置1

例如,將0xF8的第2位(從第0位開始數(shù),由低位到高位) 置1代碼示例
#include < stdio.h >int main() {    int x = 0xF8;    x |= 1< <2;     printf("x = 0x%0xn",x);    return 0;}
運行結(jié)果

2、標(biāo)記位置0

例如,將0xF8的第3位(從第0位開始數(shù),由低位到高位) 置0代碼示例
#include < stdio.h >int main() {    int x = 0xF8;    x &= (~(1< <3));     printf("x = 0x%0xn",x);    return 0;}
運行結(jié)果

3、標(biāo)記位取反

例如,將0xF8的第3位和第2位(從第0位開始數(shù),由低位到高位) 取反代碼示例
#include < stdio.h >int main() {    int x = 0xF8;    x ^= (3< <2);  // 3的二進制為0b11,左移2位剛好對應(yīng)第2和第3位    printf("x = 0x%0xn",x);    return 0;}
運行結(jié)果

五、掩碼

1、末尾連續(xù)N位都置1

例如,將0xF8的低3位都置1代碼示例
#include < stdio.h >int main() {    int x = 0xF8; // Ob1111 1000     x |= ((1< <3)-1);    printf("x = 0x%0xn",x); // 0b1111 1111    return 0;}
運行結(jié)果

2、末尾連續(xù)N位都置0

例如,將0xFF的低4位都置0代碼示例
#include < stdio.h >int main() {    int x = 0xFF; // 0b1111 1111    x &= ~((1< <4)-1);    printf("x = 0x%0xn",x); // 0b1111 0000    return 0;}
運行結(jié)果

3、末尾連續(xù)N位取反

例如,將0xFA的低4位都取反代碼示例
#include < stdio.h >int main() {    int x = 0xFA; // 0b1111 1010    x ^= ((1< <4)-1);    printf("x = 0x%0xn",x); // 0b1111 0101    return 0;}
運行結(jié)果

小結(jié)

通過這篇文章,我們學(xué)會了用位運算符<<的4種高級用法

1、計算2的整數(shù)次冪

2、將一個字節(jié)序列合并為一個整數(shù)

3、標(biāo)記碼

4、掩碼

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

標(biāo)簽:

上一篇:時間繼電器控制順序啟動、逆順序停止電路
下一篇:最后一頁