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

前言

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

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

一、人物简介

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

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

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

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

二、计算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;
}
  • 运行结果

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

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

  • 例如,将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;
}
  • 运行结果

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

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

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

四、标记码

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;
}
  • 运行结果

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

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;
}
  • 运行结果

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

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;
}
  • 运行结果

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

五、掩码

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;
}
  • 运行结果

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

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;
}
  • 运行结果

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

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;
}
  • 运行结果

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

小结

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

1、计算2的整数次幂

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

3、标记码

4、掩码

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

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

原文链接:https://www.cnblogs.com/Wayne123/p/17320266.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:逍遥自在学C语言 | 位运算符<<的高级用法 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • C 程序 对字符串集排序

    下面是详细讲解“C 程序 对字符串集排序”的完整使用攻略。 概述 在 C 语言中,我们可以使用 qsort() 函数对字符串集进行排序。具体来说,我们需要填写几个参数,包括要排序的字符串数组指针、字符串数组中字符串的个数、每个字符串的长度、和一个比较函数指针。比较函数指针是用来告诉 qsort() 函数如何进行排序的,这个函数会比较两个字符串,然后返回一个负…

    C 2023年5月9日
    00
  • C++:函数对象,STL提供的函数对象,函数适配器详解

    C++:函数对象、STL 提供的函数对象、函数适配器详解 函数对象是一种封装了函数行为的对象,它可以像函数一样执行。在 C++ 中,任何符合特定原型的类实例都可以被当做函数对象使用。 STL 中提供了一些函数对象(如算术、逻辑、关系型操作符等),可以方便地进行一些常见操作。 函数适配器是一种用来修改已有函数对象行为的对象。它可以帮助将一个函数对象从一种类型适…

    C 2023年5月22日
    00
  • php通过文件头判断格式的方法

    当我们通过PHP对一个文件进行处理的时候,有时候我们需要判断该文件的格式,从而进一步进行处理。在PHP中,我们可以通过文件头来判断文件的格式。 文件头,也称为魔数(Magic Number),是一个文件开头的特定几个字节,常用来标识文件类型。每种文件类型都有自己的魔数,根据不同的魔数来判断文件的类型,可以防止拓展名被篡改的情况下被误判。 判断文件类型的方法:…

    C 2023年5月23日
    00
  • postgresql 实现修改jsonb字段中的某一个值

    要实现修改 jsonb 字段中的某一个值,可以使用 PostgreSQL 提供的相关函数来实现。下面我会详细讲解如何使用 PostgreSQL 的函数来实现修改 jsonb 字段。 准备工作 首先,我们需要创建一个包含 jsonb 字段的表来演示。可以使用下面的 SQL 语句创建新表: CREATE TABLE example ( id SERIAL PRI…

    C 2023年5月23日
    00
  • VC实现五子棋游戏的一个算法示例

    VC实现五子棋游戏的一个算法示例 为了实现五子棋游戏的算法,我们需要考虑以下几个方面: 棋局的表示(即如何存储棋盘上每个位置的状态)。 玩家和计算机的策略(即如何判断胜负,如何实现搜索算法或者其他的博弈树算法)。 玩家和计算机的交互(即如何实现用户与计算机的交互和界面显示)。 棋局的表示 通常情况下,我们可以用一个二维数组来存储五子棋盘的状态。数组的每个元素…

    C 2023年5月22日
    00
  • 将Python代码嵌入C++程序进行编写的实例

    将Python代码嵌入C++程序可以实现在C++中调用Python库,充分利用Python库的功能,提高程序的灵活性和扩展性。下面是将Python代码嵌入C++程序进行编写的攻略。 准备工作 在进行Python代码嵌入C++编程之前,需要准备以下工作: 安装Python解释器和开发库; 安装boost.python库,这是一个C++库,可以方便地在C++编程…

    C 2023年5月30日
    00
  • VC中CWinThread类以及和createthread API的区别分析

    VC中CWinThread类是MFC(Microsoft Foundation Class)中提供的一个类,用于创建和管理Windows应用程序中的线程。这个类可以方便的管理线程的运行、暂停、停止和同步等操作,可以大大提高程序的可读性和可维护性。 与CWinThread类相比,CreateThread API函数则是Windows API中用于创建线程的函数…

    C 2023年5月22日
    00
  • C语言解决百钱买百鸡问题

    请听我讲解如下。 C语言解决百钱买百鸡问题 问题描述 现在有100元钱,要买100只鸡,公鸡5元/只,母鸡3元/只,小鸡1元/3只。问应该如何购买才能最省钱呢? 解题思路 这是一个典型的线性方程组问题,我们可以列出如下方程: $$\begin{cases}5x + 3y + \frac{1}{3}z = 100 \x + y + z = 100\end{ca…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部