C语言中的位运算详解

在C语言中,位运算符用于对二进制位进行操作,包括左移、右移、按位与、按位或、按位异或和按位取反等操作。本文将详细介绍C语言中的位运算符,包括运算规则和具体的例子。

1. 位运算符概述

C语言提供了一些位运算符,用于直接操作二进制位,这些运算符通常用于底层系统编程和优化。以下是常用的位运算符:

  • <<:二进制左移
  • >>:二进制右移
  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反

这些运算符的运算规则都是基于二进制的补码运算。

2. 位左移和位右移运算符

2.1 二进制左移 <<

左移运算符(<<)将一个数的各二进制位全部左移指定的位数,左边的二进制位丢弃,右边补0。在一定范围内,数据每向左移动一位,相当于原数据乘以2。

示例:

int num = 3;
int result = num << 2;  // 3左移2位,相当于3 * 2的2次幂
// result的值为 12

2.2 二进制右移 >>

右移运算符(>>)将一个数的各二进制位全部右移指定的位数。正数左补0,负数左补1,右边丢弃。在一定范围内,数据每向右移动一位,相当于原数据除以2。

示例:

int num = 8;
int result = num >> 2;  // 8右移2位,相当于8除以2的2次幂
// result的值为 2

3. 按位与、按位或和按位异或运算符

3.1 按位与 &

按位与运算符(&)的运算规则是对应位都为1才为1,否则为0。

示例:

int a = 9;  // 0b00001001
int b = 7;  // 0b00000111
int result = a & b;  // 按位与
// result的值为 1,二进制为0b00000001

3.2 按位或 |

按位或运算符(|)的运算规则是对应位只要有一个为1即为1,否则为0。

示例:

int a = 9;  // 0b00001001
int b = 7;  // 0b00000111
int result = a | b;  // 按位或
// result的值为 15,二进制为0b00001111

3.3 按位异或 ^

按位异或运算符(^)的运算规则是对应位一个为1一个为0才为1,否则为0。

示例:

int a = 9;  // 0b00001001
int b = 7;  // 0b00000111
int result = a ^ b;  // 按位异或
// result的值为 14,二进制为0b00001110

4. 按位取反运算符 ~

按位取反运算符(~)的运算规则是对应位为1,则结果为0;对应位为0,则结果为1。

示例:

int num = 9;  // 0b00001001
int result = ~num;  // 按位取反
// result的值为 -10,二进制为0b11110110

5. 结合赋值运算符

结合赋值运算符的经验,位运算符也有类似的结合赋值运算符,例如:<<=, >>=, &=, |= 等。

示例:

int num = 5;
num <<= 2;  // 将num左移2位,相当于num乘以2的2次幂
// num的值为 20

6. 应用实例

6.1 特定位清零

char x = 53;  // 0b00110101
x = x & 252;  // 0b11111100
// x的值为 52,二进制为0b00110100

6.2 判断特定位是否为零

char x = 53;  // 0b00110101
x = x & 128;  // 0b10000000
if (x == 0) {printf("最高位为0\n");
} else {printf("最高位不为0\n");
}

6.3 保留特定位

char x = 53;  // 0b00110101
x = x & 15;   // 0b00001111

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

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

相关文章

iOS rootless无根越狱解决方案

据游戏工委数据统计&#xff0c;2023年国内游戏市场实际销售收入与用户规模双双创下新高&#xff0c;游戏普遍采用多端并发方式&#xff0c;成为收入增长的主因之一。 中国市场实际销售收入及增长率丨数据来源&#xff1a;游戏工委 多端互通既是机遇&#xff0c;也是挑战。从游…

python实例100第16例:使用datetime输出指定格式的日期

题目&#xff1a;输出指定格式的日期。 程序分析&#xff1a;使用 datetime 模块。 #!/usr/bin/python # -*- coding: UTF-8 -*-import datetimeif __name__ __main__:# 输出今日日期&#xff0c;格式为 dd/mm/yyyy。更多选项可以查看 strftime() 方法print(datetime.date.t…

【AI大模型应用开发】1.0 Prompt Engineering(提示词工程)- 典型构成、原则与技巧,代码中加入Prompt

从这篇文章开始&#xff0c;我们就正式开始学习AI大模型应用开发的相关知识了。首先是提示词工程&#xff08;Prompt Engineering&#xff09;。 文章目录 0. 什么是提示词&#xff08;Prompt&#xff09;1. 为什么Prompt会起作用 - 大模型工作原理2. Prompt的典型构成、原则与…

【5】商密测评密码辅助工具

0X01 前言 最近在学了下商密测评&#xff0c;研究了下技术层面的测评&#xff0c;感觉找工具不方便&#xff0c;就顺手自己造了个辅助工具&#xff0c;都是自己遇到需要用的。 0x02 工具功能介绍 不爱打字&#xff0c;直接上图。后续根据技术测评层面需要继续完善和增加功能。…

基于VSG控制的MMC并网逆变器MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 根据传统同步发电机的运行特性设计了MMC-VSG功频控制器和励磁控制器&#xff0c; 实现了MMC-VSG逆变器对高压电网电压和频率的支撑。该模型包含MMC变流器模块&#xff0c;环流抑制模块&#xff0c;…

HackTheBox-Keeper

OpenVPN连接 连接上HackTheBox&#xff01; 同时找到这个靶机&#xff0c;进行join&#xff01;分配的靶机的地址位10.10.11.227&#xff01; 信息收集 nmap -sT --min-rate 10000 -p- 10.10.11.227 开放端口为22和80端口 服务版本和操作系统信息探测&#xff1a; nmap -s…

Milvus Cloud与携程的向量探索大公开

【User Tech】2024 我们来啦&#xff01; 今年&#xff0c;【User Tech】将更加专注于为社区用户提供技术功能解读、热点答疑&#xff0c;聚焦更丰富、更多样化的行业或使用场景的用户案例。我们期待通过分享更多关于 Milvus Cloud 的实战经验&#xff0c;为大家在 AI、大模型、…

ASM磁盘组配置共享存储:裸设备(60)_块设备(12)_(99)方式

--1.块设备方式配置共享存储 存储信息&#xff1a; 20个1TB的LUN&#xff0c;/dev/mapper/mpath1--mpath20 修改/etc/udev/rules.d/12-dm-permissions.rules添加内容 vi /etc/udev/rules.d/12-dm-permissions.rules ENV{DM_NAME}"mpath1", OWNER:"grid",…

YOLOv8算法改进【NO.98】改进损失函数为最新提出的Shape-IoU

前 言 YOLO算法改进系列出到这&#xff0c;很多朋友问改进如何选择是最佳的&#xff0c;下面我就根据个人多年的写作发文章以及指导发文章的经验来看&#xff0c;按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通&#xff1a; 第一…

1-08运算符和表达式

一、概述 在C语言中&#xff0c;表达式和语句是构成程序的基本元素。本节和下一章节我们就围绕它们展开讲一讲其中的C语言基础语法。 首先&#xff0c;让我们区分这两个概念&#xff1a; 语句(statement)&#xff0c;语句是代码中的一个完整的&#xff0c;可以执行的步骤。 …

微信小程序内嵌h5 分享子页面点击进入后是主页面解决办法

<web-view src{{src}}></web-view>src: https://XXXXXX,/*** 生命周期函数--监听页面加载 */ onLoad(options) {this.srcFun(options) },srcFun(options){//当有子页面id时 更改内嵌页链接if (options.urlPathNew) { let urlhttps://XXX/caseOrder?classicId${opt…

李沐之经典卷积神经网络

目录 1. LeNet 2. 代码实现 1. LeNet 输入是32*32图片&#xff0c;放到一个5*5的卷积层里面&#xff0c;卷积层的输出通道数是6&#xff0c;高宽都是28&#xff08;32-5128&#xff09;。再经过2*2的池化层&#xff0c;把28*28变成14*14&#xff08;28-22&#xff09;/214&am…

《Vue2 进阶知识》动态挂载组件之Vue.extend + vm.$mount

前言 目前工作还是以 Vue2 为主&#xff0c;今早有人提问 如何动态挂载组件&#xff1f; 话说很久很久以前就实现过&#xff0c;今天再详细的整理一下此问题&#xff01; 开始 动态组件如下&#xff0c;是个简单的例子&#xff1a; 但请注意这里给了个 id"test2"…

vue 组件 import make sure to provide the “name“ option.

百度了好多结果&#xff0c;都过时了&#xff0c;例如&#xff1a; 模块引入是否加{} 再比如&#xff1a; 对于递归组件&#xff0c;请确保提供“name”选项。 出现该错误情况之一&#xff1a; 错误由未正确引入组件或子组件引起&#xff0c;如element-ui中form表单组件未引…

PostgreSQL之SEMI-JOIN半连接

什么是Semi-Join半连接 Semi-Join半连接&#xff0c;当外表在内表中找到匹配的记录之后&#xff0c;Semi-Join会返回外表中的记录。但即使在内表中找到多条匹配的记录&#xff0c;外表也只会返回已经存在于外表中的记录。而对于子查询&#xff0c;外表的每个符合条件的元组都要…

GitLab 502 Whoops, GitLab is taking too much time to respond. 解决

1、先通过gitlab-ctl restart进行重启&#xff0c;2分钟后看是否可以正常访问&#xff0c;为什么要2分钟&#xff0c;因为gitlab启动会有很多配套的服务启动&#xff0c;包括postgresql等 2、如果上面不行&#xff0c;再看gitlab日志&#xff0c;通过gitlab-ctl tail命令查看&…

【Arduino】编程语言:定时函数、数学函数、字符函数(功能、语法格式、参数说明、返回值) | 软件开发环境:安装步骤介绍(EXE安装版、ZIP安装版)

你的负担将变成礼物,你受的苦将照亮你的路。———泰戈尔 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区…

再发一波微信红包封面,免费!免费!免费!

我是90后程序员&#xff0c;大家都叫我小码哥&#xff0c;从事互联网近10余年了&#xff0c;一直想在互联网上分享自己的管理经验和技术经验&#xff0c;同时也想找一些志同道合的朋友&#xff0c;一起聊聊如何从互联网中快速的成长起来&#xff0c;无论是通过技术、互联网风口…

谈谈曲线与曲面

目录 1、非参数曲线与曲面 2、方程式曲线与曲面 3、参数曲线与曲面 3.1平面参数曲线 3.2空间参数曲线 3.3参数曲面 1、非参数曲线与曲面 非参数曲线曲面是一种与参数曲线曲面相对的概念。在非参数方法中&#xff0c;曲线或曲面不是通过参数方程来定义的&#xff0c;而是通…

【AI视野·今日Robot 机器人论文速览 第七十二期】Mon, 8 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Mon, 8 Jan 2024 Totally 13 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Deep Reinforcement Learning for Local Path Following of an Autonomous Formula SAE Vehicle Authors Harvey Merton, Thoma…