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

前言

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

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

一、人物简介

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

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

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

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

二、优化除法运算

  • 除法运算需要比位移运算需要更多的计算资源,某些情况下采用位移运算可以提高性能

  • 代码示例

#include <stdio.h>
int main()
{
    int a = 1024;
    int b = a / 8; // 整除8
    int c = a >> 3; // 相当于除以8
    printf("b = %d, c = %d\n", b, c);
    return 0;
}
  • 每右移一位相当于除以2, a >> 3相当于a/(2*2*2) = a/8
  • 运行结果

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

三、获取字节序

  • 大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

  • 小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

  • 右移运算符还可以用于获取当前系统的字节序(即大端序或小端序)

  • 比如数字 0x1234在内存中的表示形式为:

    大端模式:
    低地址 -----------------> 高地址
    0x12 | 0x34

    小端模式:
    低地址 ------------------> 高地址
    0x34 | 0x12

  • 代码示例

#include <stdio.h>
int main()
{
    short int i = 0x1234; // 假设i在内存中的地址为0x1000
    char *p = (char *)&i; // 将i的地址转换为字符型指针,即指向0x1000的字节型指针
    if (*p == 0x12) // 判断*p的值是否等于0x12,如果等于则为大端序,否则为小端序
    {
        printf("大端序\n");
    }
    else
    {
        printf("小端序\n");
    }
    return 0;
}
  • 运行结果

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

四、提取二进制数的某一位

  • 将一个二进制数右移n位,再与1进行按位与运算,得到的结果就是这个二进制数的第n位(从第0位开始算)
  • 例如,将1011右移2位,得到的结果是10,再与1进行按位与运算,得到的结果是0,即1011的第二位是0
  • 代码示例
#include <stdio.h>
int main()
{
    int a = 0b1011;
    int b = (a >> 2) & 1; // 提取a的第二位,即0
    printf("第二位的值为 %d\n", b);
    return 0;
}
  • 运行结果

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

五、提取二进制数的多个连续位

  • 将一个二进制数右移n位,再与一个掩码进行按位与运算,得到的结果就是这个二进制数从第n位开始的若干位
  • 例如,将1011011右移3位,得到的结果是1011,再与111进行按位与运算,得到的结果是011,即1011011从第3位开始的三位是011
  • 代码示例
#include <stdio.h>
int main()
{
    int a = 0b1011011;
    int b = (a >> 3) & 0b111; // 提取a从第3位开始的3位,即101
    printf("b = %d\n", b);
    return 0;
}
  • 运行结果,3 (二进制为0b011)

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

六、浮点数向下舍入为整数

  • 这种用法通常用于嵌入式系统中,因为某些嵌入式处理器没有浮点数运算单元,只能使用整数运算单元来处理浮点数

  • 将一个浮点数乘以一个定点数的精度,并将结果向下取整,可以得到一个整数近似值

  • 例如,将一个浮点数乘以1000,再将结果右移10位,得到的结果就是这个浮点数乘以1000并向下取整的整数值

  • 代码示例

#include <stdio.h>
int main()
{
    float x = 3.1415926;
    int a = (int)(x * 1000.0f) >> 10; // 将x乘以1000并向下取整
    printf("向下取整后的数值为 %d\n", a);
    return 0;
}
  • 运行结果

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

小结

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

1、优化除法运算

2、获取字节序

3、提取二进制数的某一位

4、提取二进制数的多个连续位

5、浮点数向下舍入为整数

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

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

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

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

相关文章

  • jackson 如何将实体转json json字符串转实体

    将实体转换为JSON字符串是使用Jackson进行JSON序列化的重要过程之一。反之,将JSON字符串解析为Java对象也是使用Jackson进行JSON反序列化的过程。以下是使用Jackson完成Java实体对象的序列化和反序列化的步骤以及两个示例。 将Java实体对象序列化为JSON字符串 为了将Java实体对象转换为JSON字符串,我们需要执行以下步骤…

    C 2023年5月23日
    00
  • Android中RecyclerView拖拽、侧删功能的实现代码

    下面是关于“Android中RecyclerView拖拽、侧删功能的实现代码”的完整攻略。 RecyclerView基础 在介绍实现RecyclerView拖拽、侧删功能之前,先简单介绍一下RecyclerView的基础知识。 RecyclerView是Android提供的新的可复用列表控件,使用了一个LayoutManager来管理Item的样式,数据由A…

    C 2023年5月22日
    00
  • mysql8.0 JSON_CONTAINS的使用说明

    mysql8.0 JSON_CONTAINS函数详解 简介 JSON_CONTAINS()函数用于检查是否存在指定JSON值。在MySQL8.0中,可以用该函数判断JSON数组或对象是否包含某个JSON值。 该函数返回值boolean类型,如果待查找的JSON存在于目标JSON中,则返回1,否则返回0。 JSON_CONTAINS()函数的完整语法如下: J…

    C 2023年5月23日
    00
  • Java求最小生成树的两种算法详解

    Java求最小生成树的两种算法详解 概述 最小生成树(Minimum Spanning Tree)是指在一张连通的、有权图中找到一棵权值和最小的生成树,它是一些算法的子问题,常用于解决带权无向图的问题。常见的最小生成树算法有Prim算法和Kruskal算法,本文将详细讲解这两种算法的实现原理及其Java代码实现。 Prim算法 Prim算法是一种贪心算法,通…

    C 2023年5月22日
    00
  • C程序 将以英寸-英尺为单位的N个距离相加

    可以使用以下步骤完成C程序 将以英寸-英尺为单位的N个距离相加: 步骤一:定义距离变量和变量总数 首先需要定义变量来保存距离和距离总数,可以使用float类型来保存距离,int类型来保存距离总数,例如: int n; // 距离总数 float distance; // 单位为英尺或英寸的距离 步骤二:输入距离 使用循环结构来输入所有距离,例如: for(i…

    C 2023年5月9日
    00
  • Java实现学生成绩管理系统

    Java实现学生成绩管理系统完整攻略 搭建环境1. 安装Java开发工具包(JDK)2. 安装Java集成开发环境(IDE),如Eclipse、IntelliJ IDEA等 设计数据库1. 使用MySQL等数据库软件创建“学生成绩管理系统”所需的数据库和表结构2. 数据库表设计包括学生信息表、课程信息表和成绩信息表 实现模型层代码1. 根据设计好的表结构,创…

    C 2023年5月23日
    00
  • C++实现哈夫曼树算法

    C++实现哈夫曼树算法攻略 哈夫曼树,又称最优二叉树,是一种带权路径长度最短的二叉树。它常用于数据压缩和编码的算法中。 1. 哈夫曼树的定义 哈夫曼树是一种满足以下属性的二叉树: 树中每个叶子节点都对应一个权值; 树中每个非叶子节点的权值是其左右子树中权值之和; 树的带权路径长度最小。 2. 哈夫曼编码的实现 哈夫曼编码是一种前缀编码,它把每个不同符号对应到…

    C 2023年5月22日
    00
  • 深入理解C语言 static、extern与指针函数

    概述 在C语言中,static和extern是两个关键字,它们的作用主要与变量和函数的作用域和链接有关。而指针函数则是C语言中比较重要的一个概念,用于返回指针类型数据的函数。本文将从这三个方面进行详细讲解。 static关键字 static是一个非常常用的关键字,在C语言中主要有两个作用: 改变变量的作用域。当一个变量被定义为static时,它的作用域仅限于…

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