• 逍遥自在学C语言 | 位运算符<<的高级用法


    前言

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

    一、人物简介

    • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

    • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

    二、计算2的整数次幂

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

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

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

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

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

    四、标记码

    1、标记位置1

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

    2、标记位置0

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

    3、标记位取反

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

    五、掩码

    1、末尾连续N位都置1

    • 例如,将0xF8的低3位都置1
    • 代码示例
    #include 
    int main() 
    {
        int x = 0xF8; // Ob1111 1000 
        x |= ((1<<3)-1);
        printf("x = 0x%0x\n",x); // 0b1111 1111
        return 0;
    }
    
    • 运行结果

    2、末尾连续N位都置0

    • 例如,将0xFF的低4位都置0
    • 代码示例
    #include 
    int main() 
    {
        int x = 0xFF;	// 0b1111 1111
        x &= ~((1<<4)-1);
        printf("x = 0x%0x\n",x); // 0b1111 0000
        return 0;
    }
    
    • 运行结果

    3、末尾连续N位取反

    • 例如,将0xFA的低4位都取反
    • 代码示例
    #include 
    int main() 
    {
        int x = 0xFA;	// 0b1111 1010
        x ^= ((1<<4)-1);
        printf("x = 0x%0x\n",x); // 0b1111 0101
        return 0;
    }
    
    • 运行结果

    小结

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

    1、计算2的整数次幂

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

    3、标记码

    4、掩码

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

    📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!

  • 相关阅读:
    Rhinoceros 8(犀牛8 mac版)简体中文
    数据结构与算法训练:第十八弹
    集群渲染和渲染农场是什么意思?跟云渲染有什么关系?
    代码随想录Day19 LeetCode T669修剪二叉搜索树 LeetCode T108将有序数组转化为二叉搜索树 T538 把二叉搜索树转化为累加树
    目标检测文献
    从零编写STM32H7的MDK SPI FLASH下载算法
    自定义映射resultMap
    数字孪生体标准编程
    频次直方图、KDE和密度图
    Linux - 配置Linux用户的环境变量- Anaconda3的环境变量配置
  • 原文地址:https://www.cnblogs.com/Wayne123/p/17320266.html