逍遥自在学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日

相关文章

  • 你可能不知道的JSON.stringify()详解

    你可能不知道的JSON.stringify()详解 简介 JSON.stringify() 是 JavaScript 内置的一个可将对象转换为 JSON 字符串的方法。它将对象序列化为一个字符串,以便于存储或传输。JSON.stringify() 还可以接受一个函数作为第二个参数,用于控制转换过程。 JSON.stringify() 的参数 JSON.str…

    C 2023年5月23日
    00
  • c语言程序设计文件操作方法示例(CreateFile和fopen)

    “C语言程序设计文件操作方法示例(CreateFile和fopen)”是关于如何在C语言中使用CreateFile和fopen函数进行文件操作的攻略。下面将分别介绍CreateFile和fopen函数的使用方法,并提供两个示例说明。 CreateFile函数的使用方法 CreateFile函数是Windows操作系统中的一个API函数,用于创建或打开文件。其…

    C 2023年5月23日
    00
  • Redis教程(五):Set数据类型

    下面我将为你详细讲解一下“Redis教程(五):Set数据类型”的完整攻略。 一、Set数据类型的概述 Set(集合)时Redis支持的五种数据类型之一,是一个无序、无重复元素的集合。Set类型支持添加、删除和查询操作。Set中不支持重复元素,即每个元素都是唯一的。 二、Set数据类型的命令 1. SADD 用于向集合中添加元素,如果元素已经存在,则不执行任…

    C 2023年5月22日
    00
  • LUNC币燃烧机制是什么?LUNC币燃烧机制介绍

    LUNC币燃烧机制介绍 什么是燃烧机制? 燃烧机制是一种通行于数字货币领域的一种安全机制,该机制旨在通过不断的销毁代币来控制流通数量,从而稳定代币价格。 LUNC币燃烧机制的作用 LUNC币是一个基于以太坊构建的代币,它的燃烧机制主要有两个作用: 控制代币的流通量,避免出现通货膨胀,使代币价格稳定; 促进代币的持有者积极参与生态建设,以获得更多的钱财奖励。 …

    C 2023年5月24日
    00
  • BF算法的实现:病毒感染检测

    一、问题引入 BF(Brute-Force)算法介绍了BF算法的具体实现,但并未结合具体案例。 本随笔就是结合案例(病毒感染检测)对BF算法进行结合分析。 案例4.1: 病毒感染检测 医学研究者最近发现了某些新病毒, 通过对这些病毒的分析, 得知它们的 DNA 序列都是环状的。现在研究者巳收集了大量的病毒DNA 和人的DNA 数据,想快速检测出这些人是否感染…

    C语言 2023年4月17日
    00
  • C++生成和解析XML文件的讲解

    下面是关于C++生成和解析XML文件的攻略。 生成XML文件 1. 引入头文件 XML文件的生成需要用到tinyxml2这个开源库。因此首先需要下载此库,并在代码中引入相应的头文件。 #include <tinyxml2.h> 2. 创建根节点 在生成XML文件之前,需要先创建一个根节点。可以使用tinyxml2库提供的XMLDocument类来…

    C 2023年5月23日
    00
  • C语言中花式退出程序的方式总结

    下面是一个完整的“C语言中花式退出程序的方式总结”的攻略。 花式退出程序 程序退出是指程序终止运行并离开当前程序。C语言中有很多种方式能够退出程序,下面将以如下方式进行说明: Exit方法 Return方法 异常退出方法 Exit方法 通过调用函数exit()可以让程序直接退出。exit()函数的声明在 stdlib.h 头文件中。 void exit(in…

    C 2023年5月23日
    00
  • .NET中的DES对称加密详解

    .NET中的DES对称加密详解 什么是对称加密 对称加密算法是指加密和解密时使用相同的密钥的加密算法,也就是通过同一把密钥将明文加密成密文,然后再通过同样的密钥将密文解密成明文。在对称加密中,密钥是保密的,只有密钥的持有者才能解密密文。 .NET中提供了多种对称加密算法,其中包括DES、3DES、AES等。 DES加密算法介绍 DES加密算法是一种对称加密算…

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