2

逍遥自在学C语言 | 位运算符<<的高级用法 - 知微之见

 1 year ago
source link: https://www.cnblogs.com/Wayne123/p/17320266.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

1511464-20230414233413479-1790717691.png

一、人物简介

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

二、计算2的整数次幂

#include <stdio.h>
int main() 
{
    int x = 1;
    printf("请输入2的次方数:");
    scanf("%d",&x);
    int y = 1 << x; 
    printf("\n2的%d次方 = %d\n",x,y);
    return 0;
}
1511464-20230414233425426-1249243144.png

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

  • 例如,将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%08x\n", x);
    return 0;
}
1511464-20230414233437025-1862149533.png

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

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

四、标记码

1、标记位置1

  • 例如,将0xF8的第2位(从第0位开始数,由低位到高位) 置1
#include <stdio.h>
int main() 
{
    int x = 0xF8;
    x |= 1<<2; 
    printf("x = 0x%0x\n",x);
    return 0;
}
1511464-20230414233500201-116145448.png

2、标记位置0

  • 例如,将0xF8的第3位(从第0位开始数,由低位到高位) 置0
#include <stdio.h>
int main() 
{
    int x = 0xF8;
    x &= (~(1<<3)); 
    printf("x = 0x%0x\n",x);
    return 0;
}
1511464-20230414233509874-1408293983.png

3、标记位取反

  • 例如,将0xF8的第3位和第2位(从第0位开始数,由低位到高位) 取反
#include <stdio.h>
int main() 
{
    int x = 0xF8;
    x ^= (3<<2);  // 3的二进制为0b11,左移2位刚好对应第2和第3位
    printf("x = 0x%0x\n",x);
    return 0;
}
1511464-20230414233521884-1896471180.png

1、末尾连续N位都置1

  • 例如,将0xF8的低3位都置1
#include <stdio.h>
int main() 
{
    int x = 0xF8; // Ob1111 1000 
    x |= ((1<<3)-1);
    printf("x = 0x%0x\n",x); // 0b1111 1111
    return 0;
}
1511464-20230414233540846-207805166.png

2、末尾连续N位都置0

  • 例如,将0xFF的低4位都置0
#include <stdio.h>
int main() 
{
    int x = 0xFF;	// 0b1111 1111
    x &= ~((1<<4)-1);
    printf("x = 0x%0x\n",x); // 0b1111 0000
    return 0;
}
1511464-20230414233551258-1808466247.png

3、末尾连续N位取反

  • 例如,将0xFA的低4位都取反
#include <stdio.h>
int main() 
{
    int x = 0xFA;	// 0b1111 1010
    x ^= ((1<<4)-1);
    printf("x = 0x%0x\n",x); // 0b1111 0101
    return 0;
}
1511464-20230414233600986-2097861087.png

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

1、计算2的整数次幂

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

3、标记码

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK