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

news2024/10/5 15:35:17

前言

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

一、人物简介

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

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

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

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

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

四、标记码

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

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

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

五、掩码

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

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

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

小结

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

1、计算2的整数次幂

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

3、标记码

4、掩码

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

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

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

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

相关文章

带你们偷瞄编程绕不开的C语言(二)

&#x1f929;&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;&#xff1a;这里是C专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;希望可以帮到读者们哦。 &#x1f…

常见面试题之MQ篇

1.1.你们为什么选择了RabbitMQ而不是其它的MQ&#xff1f; 如图&#xff1a; 话术&#xff1a; kafka是以吞吐量高而闻名&#xff0c;不过其数据稳定性一般&#xff0c;而且无法保证消息有序性。我们公司的日志收集也有使用&#xff0c;业务模块中则使用的RabbitMQ。 阿里巴…

SQL——子查询

在SQL语言中&#xff0c;一个SELECT&#xff0d;FROM&#xff0d;WHERE语句 称为一个查询块。 子查询(或内层查询)是一个 SELECT 查询,它嵌套在 (1)SELECT、UPDATE、INSERT、DELETE 语句的 WHERE 、 (2)带GROUP BY 的 HAVING 子句内&#xff0c; (3)或其它子查询中 (与比较(6个…

JDBC MySQL ORM 实现登录功能(避免SQL注入)

目录 一、创建数据库表 二、创建Users类 三、登录类 四、存在的漏洞 &#xff08;1&#xff09;SQL注入 &#xff08;2&#xff09;分析 &#xff08;3&#xff09;补救 一、创建数据库表 CREATE DATABASE jdbcdatabase;CREATE TABLE IF NOT EXISTS user( uid INT PRIMARY KE…

windows 配置 libxml2

1、下载需要的包 1&#xff09;libconv LibIconv for Windows 2) libxml2 Releases GNOME / libxml2 GitLab 2、配置文件 将 libxml2 的包解压到一个目录&#xff0c;并在该目录下创建 include 和 lib 目录 将如下的 iconv.h 复制到新建的 include 目录 路径&#xff…

013 - C++引用

本期我们要讲的是 C 中的引用。 上期我们讨论了指针&#xff0c;如果你没有看过那期内容&#xff0c;你一定要回去看看&#xff0c;因为引用实际上只是指针的扩展&#xff0c;你至少需要在基本层面上理解指针是如何工作的&#xff0c;然后才能继续学习本期的内容&#xff0c;本…

UI Toolkit(1)

UI ToolkitUI Toolkit界面画布设置背景制作UI布局UI Toolkit界面 在Unity 2021LTS版本之后UI Toolkit也被内置在Unity中&#xff0c;Unity有意的想让UI Toolkit 成为UI的主要搭建方式&#xff0c;当然与UGUI相比还是有一定的差别。他们各有有点&#xff0c;这次我们就开始介绍…

【Homebrew】MacBook的第二个AppStore

英文官网&#xff1a;Homebrew — The Missing Package Manager for macOS (or Linux) 中文官网&#xff1a;macOS&#xff08;或 Linux&#xff09;缺失的软件包的管理器 — Homebrew 1 简介 Homebrew 由开发者 Max Howell 开发&#xff0c;并基于 BSD 开源&#xff0c;是一…

基于K-最近邻算法构建红酒分类模型

基于K-最近邻算法构建红酒分类模型 描述 Wine红酒数据集是机器学习中一个经典的分类数据集&#xff0c;它是意大利同一地区种植的葡萄酒化学分析的结果&#xff0c;这些葡萄酒来自三个不同的品种。数据集中含有178个样本&#xff0c;分别属于三个已知品种&#xff0c;每个样本…

4.10-4.11学习总结

目录 MySql 关系型库数据 mysql启动方法 SQL通用语法 查询表 创建表 Mysql数据类型 表操作-修改 MySQL图形化界面 DCL 函数 约束 JDBC MySql 关系型库数据 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点: 使用表存储数据&#xff0c;格式…

【C++】哈希(位图,布隆过滤器)

今天的内容是哈希的应用&#xff1a;位图和布隆过滤器 目录 一、位图 1.位图概念 2.位图的应用 二、哈希切分 三、布隆过滤器 1.布隆过滤器的概念 2.布隆过滤器的应用 四、总结 一、位图 1.位图概念 今天的内容从一道面试题开始引入&#xff1a; 给40亿个不重复的无符…

chapter-5 数据库设计

以下课程来源于MOOC学习—原课程请见&#xff1a;数据库原理与应用 考研复习 引言 设计的时候: 我们为什么不能设计成R&#xff08;学号&#xff0c;课程号&#xff0c;姓名&#xff0c;所咋系&#xff0c;系主任&#xff0c;成绩&#xff09;&#xff1f; 因为存在数据冗余…

BGP与OSPF混合组网

如图。R1和R2之间是OSPF Area 0,R23和R4之间是OSPF Area 1,R5和R6之间是OSPF Area2。除了R1和R2之间的cost是100,其余链路的cost都是10. AR1/2/3/4/5/6之间通过Loopback口建立IBGP全互联邻居关系,并且都是AS11520,和外部建立EBGP邻居访问100.100.100.1的网络。(不确定图中…

企业内训视频如何防范被盗录和下载?

企业内训视频如何防范被盗录和下载&#xff1f; 1. 【防下载】&#xff1a;实现视频文件的加密混淆、防下载&#xff1b; 2. 【防录屏】&#xff1a;A.&#xff08;ID跑马灯防录屏&#xff09;实现不同学员观看视频&#xff0c;实时显示该学员的姓名手机号时间&#xff1b;B.&…

线性代数 --- 最小二乘在直线拟合上的应用与Gram-Schmidt正交化(下)

在上一篇文章中&#xff0c;通过一个例子来说明最小二乘在拟合直线时所发挥的作用&#xff0c;也通过两个插图的比较进一步的阐明了投影与最小化e之间的密切关系。 线性代数 --- 最小二乘在直线拟合上的应用与Gram-Schmidt正交化&#xff08;上&#xff09;_松下J27的博客-CSD…

【UE Sequencer系列】08-副镜头切换、摄像机绑定摇臂的使用、摄像机绑定滑轨的使用

目录 一、副镜头切换 二、摄像机绑定摇臂的使用 三、摄像机绑定滑轨的使用 一、副镜头切换 1. 为“shot_05”新建镜头&#xff08;复制资产&#xff0c;创建新的关卡序列&#xff09; 同样的步骤再创建一个“Shot_07_02” 此时我们就可以对“Shot_07”中的两个副镜头进行切换…

最简单明了vite+ts+sass无loaders配置,利用ts读取scss文件中的变量并在App.vue中使用

做后端的&#xff0c;前端水平有限&#xff0c;最近练手&#xff0c;遇到了左侧菜单是展开关闭的问题&#xff0c;接触到了scss中定义全局变量&#xff0c;利用typescript读取的问题&#xff0c;在此记录一下 vitetssass 环境&#xff1a;package.json中内容如下&#xff0c;…

利用KMean算法进行分类

什么是KMean算法&#xff1f;简要说明什么是KMean算法&#xff0c;以及KMean算法的应用场景。 KMeans是一种聚类算法&#xff0c;它将数据集分成K个不同的类别&#xff08;簇&#xff09;&#xff0c;使得每个数据点都属于一个簇&#xff0c;并且每个簇的中心点&#xff08;质…

网络通信的安全性(HTTPS)

网络通信的安全性&#xff08;HTTPS&#xff09; 互联网是由无数网络节点组成的&#xff0c;两点之间的通信一般会经过很多个网络节点&#xff0c;因此&#xff0c;我们难免会有疑问&#xff1a; 作为发送方&#xff0c;我发送的消息内容会不会被中间人看到&#xff1f;&…

4.2 矩阵乘法的Strassen算法

1.伪代码以及用到的公式 ​ ​ ​ 2.代码 package collection; ​ public class StrassenMatrixMultiplication {public static int[][] multiply(int[][] a, int[][] b) {int n a.length;int[][] result new int[n][n]; ​if (n 1) {result[0][0] a[0][0] * b[0][0]…