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

嵌入式技术

1372人已加入

描述

前言

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

程序

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。
  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、计算2的整数次幂

  • 代码示例
#include < stdio.h >
int main() 
{
    int x = 1;
    printf("请输入2的次方数:");
    scanf("%d",&x);
    int y = 1 < < x; 
    printf("n2的%d次方 = %dn",x,y);
    return 0;
}
  • 运行结果

程序

三、将一个字节序列合并为一个整数

  • 例如,将4个字节组成的字节序列b合并为一个整数
  • 代码示例
#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("合并后的整数 = 0x%08xn", x);
    return 0;
}
  • 运行结果

程序

❝下面介绍的两种用法,会用到&``|``^的知识

如果有不清楚的,可以查看之前的文章:位运算符的基础用法

四、标记码

1、标记位置1

  • 例如,将0xF8的第2位(从第0位开始数,由低位到高位) 置1
  • 代码示例
#include < stdio.h >
int main() 
{
    int x = 0xF8;
    x |= 1< < 2; 
    printf("x = 0x%0xn",x);
    return 0;
}
  • 运行结果

程序

2、标记位置0

  • 例如,将0xF8的第3位(从第0位开始数,由低位到高位) 置0
  • 代码示例
#include < stdio.h >
int main() 
{
    int x = 0xF8;
    x &= (~(1< < 3)); 
    printf("x = 0x%0xn",x);
    return 0;
}
  • 运行结果

程序

3、标记位取反

  • 例如,将0xF8的第3位和第2位(从第0位开始数,由低位到高位) 取反
  • 代码示例
#include < stdio.h >
int main() 
{
    int x = 0xF8;
    x ^= (3< < 2);  // 3的二进制为0b11,左移2位刚好对应第2和第3位
    printf("x = 0x%0xn",x);
    return 0;
}
  • 运行结果

程序

五、掩码

1、末尾连续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;
}
  • 运行结果

程序

2、末尾连续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;
}
  • 运行结果

程序

3、末尾连续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;
}
  • 运行结果

程序

小结

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

1、计算2的整数次幂

2、将一个字节序列合并为一个整数

3、标记码

4、掩码

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

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

全部0条评论

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

×
20
完善资料,
赚取积分