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

news2024/10/5 5:11:58

前言

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

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们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
  • 运行结果

三、获取字节序

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

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

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

  • 比如数字 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;
}
  • 运行结果

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

  • 将一个二进制数右移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;
}
  • 运行结果

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

  • 将一个二进制数右移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)

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

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

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

  • 例如,将一个浮点数乘以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;
}
  • 运行结果

小结

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

1、优化除法运算

2、获取字节序

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/421606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIP-6.8BGP的团体属性、BGP联盟

BGP的团体属性、BGP联盟1、Community:团体属性1.1、案例配置2、BGP联盟属性2.1、配置案例&#xff1a;2.2、四种类型的AS_PATH&#xff1a;对于大型网络或者路由条目较多&#xff0c;使用一种BGP特有的路由标记&#xff0c;用于简化路由策略的执行。对于减少路由条目&#xff0…

unity,制作一个环状滑动条

介绍 unity&#xff0c;制作一个环状滑动条 方法 1.导入png图片素材2.新建一个滑动条&#xff0c;两者图片都设置为图片3.调节slider的参数4.调节backgroud的参数5.fill area、fill的参数同上。 得到两个叠加的圆环。6.设置fill的背景颜色为红色7.设置fill填充方式&#xff0…

【C++】容器适配器之priority_queue 仿函数

一、priority_queue 的介绍和使用 1.priority_queue 的介绍 我们和学习之前的容器一样&#xff0c;可以使用cplusplus官网进行学习&#xff1a;priority_queue文档介绍 priority_queue(优先级队列)是一种容器适配器&#xff0c;它 和queue使用同一个头文件&#xff0c;其底层…

Elastic(ELK) Stack 架构师成长路径

Elastic Stack&#xff08;ELK Stack&#xff09;是一个开源的日志分析平台&#xff0c;由 Elasticsearch、Logstash 和 Kibana 三个组件组成&#xff0c;主要用于数据搜索、分析和可视化。要成为一名 ELK Stack 架构师&#xff0c;需要遵循一定的成长路径&#xff0c;以便逐步…

详解HiveSQL执行计划

一、前言 Hive SQL的执行计划描述SQL实际执行的整体轮廓&#xff0c;通过执行计划能了解SQL程序在转换成相应计算引擎的执行逻辑&#xff0c;掌握了执行逻辑也就能更好地把握程序出现的瓶颈点&#xff0c;从而能够实现更有针对性的优化。此外还能帮助开发者识别看似等价的SQL其…

【计算机组成原理】计算机组成原理(三)

计算机组成原理&#xff08;三) 奇偶校验码&#xff1a; 校验原理&#xff1a; 2个比特位可以映射出4种合法的情况 2的2次方 3个比特位可以映射出8种不同的情况&#xff0c;其中4种为合法情况&#xff0c;另外4种为非法情况 上图的每个编码都是一个码字 在同一组码字内&am…

【DES详解】(一)处理input block(64 bits)

一、DES 加密算法总览 0-1、初识置换 IP&#xff08;Initial Permutation&#xff09; 输入&#xff1a;明文&#xff08;64 bits&#xff09; 过程&#xff1a;初识置换 输出&#xff1a;处理后的明文permuted input&#xff08;64 bits&#xff09; 首先&#xff0c;对需要解…

手写一个IO泄露监测框架

作者&#xff1a;长安皈故里 大家好&#xff0c;最近由于项目原因&#xff0c;对IO资源泄漏的监测进行了一番调研深入了解&#xff0c;发现IO泄漏监测框架实现成本比较低&#xff0c;效果很显著&#xff1b;同时由于IO监测涉及到反射&#xff0c;还了解到了通过一种巧妙的方式实…

AEC-Q认证介绍及所有最新工程文件下载

AEC-Q认证介绍及所有最新文件&#xff08;英文版&#xff09;下载 注意&#xff1a; 更多交流及资料请加V&#xff1a;john-130 AEC-Q认证介绍 1&#xff0c;AEC-Q认证总体情况介绍 &#xff08;​1&#xff09;AEC&#xff08;Automotive Electronics Council&#xff09;…

图像分类:Pytorch图像分类之-- MobileNet系列模型

文章目录前言MobileNetV1模型介绍DW&#xff08;Depthwise Convolution&#xff09;卷积PW &#xff08;Pointwise Convolution&#xff09;卷积深度可分离卷积&#xff08;DWPW&#xff09;ReLU6激活函数的介绍MobileNet V1网络结构MobileNet V1程序MobileNetV2模型介绍Invert…

链接、包管理工具、polyrepo、monorepo以及Lerna 工具的使用

nodejs 链接、包管理工具、多包管理以及Lerna 工具的使用jcLee95&#xff1a;https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/129903902 目 录1. 概述…

bjdctf_2020_babyrop2-fmt-leak canary

1,三连 分析:开了canary&#xff0c;先想办法获取canary值。 2&#xff0c;IDA静态分析&#xff0c;查看可以泄露canary的地方&#xff0c;否则只能爆破了 发现可以格式化字符串函数泄露的地方&#xff1a; 栈帧结构&#xff1a; 高地址 -------------- gift_ret栈帧 ------…

【算法宇宙——在故事中学算法】背包dp之01背包问题

唯手熟尔方成艺&#xff0c;唯读书能致卓越。勤学苦练方可成&#xff0c;路漫漫其修远兮&#xff01; 文章目录前言正文故事总结前言 尽管计算机是门严谨的学科&#xff0c;但正因为严谨&#xff0c;所以要有趣味才能看得下去。在笔者的前几篇算法类文章中&#xff0c;都采用了…

智慧公厕系统的应用示例

近几年&#xff0c;在一些高速服务区或者一些城市的公共厕所当中&#xff0c;总会看见一些富有科技感的硬件&#xff0c;比如厕位有无人指示灯、厕所除臭杀菌机、智能取纸机、智能洗手台镜面广告机等。现在在衡量城市发展的过程中&#xff0c;总会以城市的建设&#xff0c;城市…

Weblogic远程代码执行漏洞 CVE-2023-21839

漏洞简介 WebLogic Core远程代码执行漏洞&#xff08;CVE-2023-21839&#xff09;&#xff0c;该漏洞允许未经身份验证的远程攻击者通过T3/IIOP协议进行 JNDI lookup 操作&#xff0c;破坏易受攻击的WebLogic服务器&#xff0c;成功利用此漏洞可能导致Oracle WebLogic服务器被接…

MySQL可重复读事务隔离具体是怎么实现的

事务的启动会有的操作 事务的隔离等级有四种&#xff0c;现在说默认的可重复读&#xff0c;可重复读就是一个事务执行过程中看到的数据&#xff0c;总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下&#xff0c;未提交变更对其他事务也是不可见的。 可重复…

Java阶段一Day22

Java阶段一Day22 文章目录Java阶段一Day22线程安全synchronized教师总结新单词多线程多线程并发安全问题概念例synchronized关键字同步方法同步块在静态方法上使用synchronized互斥锁总结重点:多线程并发安全问题聊天室(续)实现服务端发送消息给客户端服务端转发消息给所有客户…

内网穿透实现在外远程连接RabbitMQ服务

文章目录前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址转载自远控源码文章&#xff1a;无公网IP&#xff0c;…

Linux Systemd type=simple和type=forking的区别

Typeforking 使用Typeforking时&#xff0c;要求ExecStart启动的命令自身就是以daemon模式运行的。 而以daemon模式运行的进程都有一个特性&#xff1a;总是会有一个瞬间退出的中间父进程&#xff0c;例如&#xff0c;nginx命令默认以daemon模式运行&#xff0c;所以可直接将其…

Nodejs vm/vm2沙箱逃逸

文章目录什么是沙箱以及VM&#xff1f;vm模块nodejs作用域vm沙箱vm沙箱逃逸vm2例题分析&#xff1a;&#xff08;待补充&#xff09;[HFCTF2020]JustEscape[HZNUCTF 2023 final]eznode參考文章:什么是沙箱以及VM&#xff1f; 什么是沙箱&#xff1a; 沙箱就是能够像一个集装箱…