逍遙自在學C語言 位運算子 "|" 的5種高階用法

知微之見發表於2023-04-11

前言

在上一篇文章中,我們介紹了&運算子的高階用法,本篇文章,我們將介紹| 運算子的一些高階用法。

一、人物簡介

  • 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。

  • 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。

二、將兩個位元組合併成一個16位整數

#include <stdio.h>

int main() 
{
    unsigned char lowByte = 0x12;   // 0001 0010
    unsigned char highByte = 0x34;  // 0011 0100
    unsigned short result = (highByte << 8) | lowByte;  // 0011 0100 0001 0010
    printf("合併結果為 %04x\n", result);       // 輸出: 0x3412
    return 0;
}

三、將一個位元組的低4位和高4位交換

#include <stdio.h>

int main() 
{
    unsigned char data = 0xab;   // 1010 1011
    data = (data << 4) | (data >> 4);  // 1011 1010
    printf("交換結果為 %02x\n", data);      // 輸出:0xba
    return 0;
}

四、將一個位元組中的某些位置1

#include <stdio.h>
int main() 
{
    int x;
    printf("請輸入一個數:");
    scanf("%d", &x);
    printf("\n第4位置1後,這個數變為 %d\n", x | 0b1000); 
    return 0;
}

五、將一個位元組中的某些位置0

#include <stdio.h>
int main() {
    int x;
    int a = 0b1000; 
    printf("請輸入一個數:");
    scanf("%d", &x);
    printf("\n第4位置0後,這個數變為 %d\n", (x | a) - a ); 
    return 0;
}

六、將低位連續的0變為1

#include <stdio.h>
int main() 
{
    int x;
    printf("請輸入一個數:");
    scanf("%d", &x);
    printf("\n低位連續的0變為1,這個數變為%d\n", x | (x-1) );
    return 0;
}


小結

透過這篇文章,我們學會了用位運算子|的5種高階用法

​ 1、將兩個位元組合併成一個16位整數

​ 2、將一個位元組的低4位和高4位交換

​ 3、將一個位元組中的某些位置1

​ 4、將一個位元組中的某些位置0

​ 5、將低位連續的0變為1

在下一篇文章中,我們將介紹位運算子^的一些高階用法。

相關文章