C语言中位运算符的高级用法(2)

嵌入式技术

1338人已加入

描述

前言

在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法。

C语言

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们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("合并结果为 %04xn", result);       // 输出: 0x3412
    return 0;
}

C语言

三、将一个字节的低4位和高4位交换

#include < stdio.h >

int main() 
{
    unsigned char data = 0xab;   // 1010 1011
    data = (data < < 4) | (data > > 4);  // 1011 1010
    printf("交换结果为 %02xn", data);      // 输出:0xba
    return 0;
}

C语言

四、将一个字节中的某些位置1

#include < stdio.h >
int main() 
{
    int x;
    printf("请输入一个数:");
    scanf("%d", &x);
    printf("n第4位置1后,这个数变为 %dn", x | 0b1000); 
    return 0;
}

C语言

五、将一个字节中的某些位置0

#include < stdio.h >
int main() {
    int x;
    int a = 0b1000; 
    printf("请输入一个数:");
    scanf("%d", &x);
    printf("n第4位置0后,这个数变为 %dn", (x | a) - a ); 
    return 0;
}

C语言

六、将低位连续的0变为1

#include < stdio.h >
int main() 
{
    int x;
    printf("请输入一个数:");
    scanf("%d", &x);
    printf("n低位连续的0变为1,这个数变为%dn", x | (x-1) );
    return 0;
}

C语言C语言

小结

通过这篇文章,我们学会了用位运算符|的5种高级用法

1、将两个字节合并成一个16位整数

2、将一个字节的低4位和高4位交换

3、将一个字节中的某些位置1

4、将一个字节中的某些位置0

5、将低位连续的0变为1

在下一篇文章中,我们将介绍位运算符^的一些高级用法。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分