当前位置: 首页 > news >正文

C语言 位操作

定义

位操作提高程序运行效率,减少除法和取模的运算。在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。

左移

后空缺自动补0

右移

分为逻辑右移和算数右移

逻辑右移

不管什么类型,空缺自动补0

算数右移

若是无符号数,则空缺补0,若是负数,则空缺补1

移位运算符

位运算符操作的都是整型的数据

<<:在一定范围内,每向左移1位,就相当于*2

>>:在一定范围内,每向右移1位,就相当于/2

左移运算符

左移运算符是一个计算机用语。用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。

计算方法

左移表达式的位 result = expression1 << expression2

参数 result,任何变量。

expression1,任何表达式。

expression2,任何表达式。

说明:<<运算符把expression1的所有位向左移expression2指定的位数。

左移

运算规则

按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

语法格式

需要移位的数字 << 移位的次数

数学意义

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

带符号右移 >>

运算规则

按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

语法格式

需要移位的数字 >> 移位的次数

数学意义

右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余 数就不要了。

无符号右移 >>>

运算规则

按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。 其他结构和>>相似。

按位逻辑运算符

二进制反码或按位取反:~

一元运算符~把1变为0,把0变为1

~a不会改变a的值,但是该运算符确实创建了一个可以使用或者赋值的新值

char a=2;

char b=~a; //a的值不会被改变

a=~a; //改变了a的值

printf("%d",~a);

a的值为00000010,~a的值为11111101

按位与:& 都为1,结果为1

二元运算符&通过逐位比较两个运算对象,生成一个新值。对于每一位,只有两个运算对象中相应的位都为1时,结果才是1

&=

val &=0377;+

val=val & 0377; //二者等价

按位或:| 至少一个为1,结果为1

二元运算符|,通过逐个比较两个运算对象,生成一个新值。对于每个位,如果两个运算对象中相应的位为1,结果就为真

|=

val |= 0377;

val=val | 0377; //二者等价

按位异或:^ 只有一个为1,结果为1

二元运算符^逐位比较两个运算对象。对于每一位,如果两个运算对象中相应的位一个为1,但不是两个都为1,结果为1

^=

val ^=0377;

val=val^0377; //二者等价

应用

掩码:按位与 &

打开位(设置位) :|

关闭位(清空位):&和~

切换位 :^

检查位的值

相关文章:

C语言 位操作

定义 位操作提高程序运行效率&#xff0c;减少除法和取模的运算。在计算机程序中&#xff0c;数据的位是可以操作的最小数据单位&#xff0c;理论上可以用“位运算”来完成所有的运算和操作。 左移 后空缺自动补0 右移 分为逻辑右移和算数右移 逻辑右移 不管什么类型&am…...

Go语言中入门Hello World以及IDE介绍

您可以阅读Golang教程第1部分&#xff1a;Go语言介绍与安装 来了解什么是golang以及如何安装golang。 Go语言已经安装好了&#xff0c;当你开始学习Go语言时&#xff0c;编写一个"Hello, World!"程序是一个很好的入门点。 下面将会提供了一些有关IDE和在线编辑器的…...

Java面试题-Java核心基础-第二天(基本语法)

目录 一、注释有几种形式 二、标识符与关键字的区别 三、自增自减运算符 四、移位运算符 五、continue、break、return的区别 一、注释有几种形式 注释除了有其他编程语言有的单行注释和多行注释之外&#xff0c;还有其Java特有的文档注释 文档注释能够使用javadoc命令就…...

Linux 部署 GitLab idea 连接

概述 GitLab 是一个开源的代码管理平台&#xff0c;使用 Git 作为版本控制工具&#xff0c;提供了 Web 界面和多种功能&#xff0c;如 wiki、issue 跟踪、CI/CD 等。 GitLab 可以自托管或使用 SaaS 服务&#xff0c;支持多种操作系统和执行器。 GitLab 可以帮助软件开发团队…...

Java延迟队列——DelayQueue

Java延迟队列——DelayQueue DelayQueue的定义 public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E>DelayQueue是一个无界的BlockingQueue&#xff0c;是线程安全的&#xff08;无界指的是队列的元素数量不存…...

Vulnhub系列靶机---Raven2

文章目录 Raven2 渗透测试信息收集提权UDF脚本MySQL提权SUID提权 Raven2 渗透测试 信息收集 查看存活主机 arp-scan -l 找到目标主机。 扫描目标主机上的端口、状态、服务类型、版本信息 nmap -A 192.168.160.47目标开放了 22、80、111 端口 访问一下80端口&#xff0c;并…...

设计模式-生成器模式

生成器模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于构建复杂的对象。这种模式将构造代码和表示代码分离开来&#xff0c;使得同样的构造过程可以创建不同的表示。 以下是一个简单的Java实现&#xff1a; // 产品 class Product …...

Nginx正向代理配置(http)

前言 在工作中我们经常使用nginx进行反向代理,今天介绍下怎么进行正向代理,支持http请求,暂不支持https 首先先介绍下正向代理和反向代理。 正向代理 在客户端&#xff08;浏览器&#xff09;配置代理服务器&#xff0c;通过代理服务器进行互联网访问。 反向代理 客户端只…...

ARMv5架构对齐访问异常问题

strh非对齐访问 在ARMv5架构中&#xff0c;对于strh指令&#xff08;Store Halfword&#xff09;&#xff0c;通常是要求对地址进行对齐访问的。ARMv5架构对于半字&#xff08;Halfword&#xff09;的存储操作有对齐要求&#xff0c;即地址必须是2的倍数。 如果尝试使用strh指…...

Go中varint压缩编码原理分析

文章目录 编码介绍无符号整数较小的值较大的值Go中的实现编码PutUvarint解码Uvarint 有符号整数较小的值(指绝对值)较大的负数(只绝对值)Go中的实现编码PutVarint解码Varint 总结 编码介绍 varint是一种将整数编码为变长字节的压缩编码算法&#xff0c;本篇文章就是分析该编码…...

在IDEA中如何用可视化界面操作数据库? 在idea中如何操作数据库? 在idea中如何像Navicat一样操作数据库?

1、找到database&#xff0c;创建连接 我用了中文包&#xff0c;英文状态下和我的操作完全一样 英文下第二列数据库名称为 database 2、配置相关属性&#xff0c;如IP地址&#xff0c;密码等 3、选择对应的库名&#xff0c;此处也叫架构 4、然后就可以进行愉快的操作了...

数据库安全-RedisHadoopMysql未授权访问RCE

目录 数据库安全-&Redis&Hadoop&Mysql&未授权访问&RCE定义漏洞复现Mysql-CVE-2012-2122 漏洞Hadoop-配置不当未授权三重奏&RCE 漏洞 Redis-未授权访问-Webshell&任务&密匙&RCE 等漏洞定义&#xff1a;漏洞成因漏洞危害漏洞复现Redis-未授权…...

辅助驾驶功能开发-功能规范篇(27)-3-导航式巡航辅助NCA华为

书接上回 2.2.2.3.7控制模块 控制模块由横向控制和纵向控制组成。根据横、纵向规划给出的行驶轨迹和给定速度,进行车辆的纵横向控制,输出方向盘转角、加速度或制动踏板开度和档位信息,必要条件下输出车灯信号等。 2.2.2.4 行为仲裁模块 纵向状态: 当纵向位于Off/Standby…...

探索UI设计|栅格系统的深入分析和应用

界面排版太乱了。你知道网格系统的用途吗&#xff1f;网格系统困扰着许多初级网页设计师&#xff0c;就像一个谜。如果您对网格在设计中的应用有任何疑问&#xff0c;本文是为您量身定制的&#xff0c;并深入分析UI设计中网格系统的基本要素和优点。 什么是网格系统 网格系统…...

AI 律助 Alpha GPT 线上实操发布会,重磅发布!

数字化时代,随着人工智能的迅猛发展,各行各业都在积极探索通过智能化工具实现工作效率翻升的可能性。“ ChatGPT 类产品”是未来办公应用软件发展的重要趋势之一,但如何将 ChatGPT 真正应用于法律人的工作,赋能效率提升?法律行业同样面临着新的挑战和机遇。 破局的关键是实现技…...

【漏洞复现】安全云平台存在任意文件下载getshell

漏洞描述 深圳市强鸿电子有限公司鸿运主动安全云平台存在任意文件下载漏洞,攻击者可通过此漏洞下载敏感文件信息。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权…...

【JUC】原子操作类及LongAddr源码分析

文章目录 1. 十八罗汉2. 原子类再分类2.1 基本类型原子类2.2 数组类型原子类2.3 引用类型原子类2.4 对象的属性修改原子类2.5 原子操作增强类 3. 代码演示及性能比较&#xff1a;4. LongAddr原理5. LongAddr源码分析5.1 add()5.2 longAccumulate()5.3 sum() 6. 小总结6.1 Atomi…...

203、RabbitMQ 之 使用 direct 类型的 Exchange 实现 消息路由 (RoutingKey)

目录 ★ 使用direct实现消息路由代码演示这个情况二ConstantUtil 常量工具类ConnectionUtil 连接RabbitMQ的工具类Publisher 消息生产者测试消息生产者 Consumer01 消息消费者01测试消费者结果&#xff1a; Consumer02 消息消费者02测试消费者结果&#xff1a; 完整代码&#x…...

微服务+Java+Spring Cloud +UniApp +MySql智慧工地综合管理云平台源码,SaaS模式

智慧工地围绕工程现场人、机、料、法、环及施工过程中质量、安全、进度、成本等各项数据满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效. 智慧工地综合管理云平台源码&#xff0c;PC监管端、项目端&#xff1b;APP监管端、项目端、数据可视化大屏端源码&#xf…...

QMidi Pro for Mac:打造您的专属卡拉OK体验

你是否曾经厌倦于在KTV里与朋友们争夺麦克风&#xff1f;是否想要在家中享受自定义的卡拉OK体验&#xff1f;现在&#xff0c;有了QMidi Pro for Mac&#xff0c;一切变得简单而愉快&#xff01; QMidi Pro是一款功能强大的卡拉OK播放器&#xff0c;专为Mac用户设计。它充分利…...

脑信号→自然语言转化失败率骤降62%?NotebookLM v2.3神经对齐模块深度拆解,仅限首批内测开发者知晓

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM脑机接口研究 NotebookLM 是 Google 推出的基于用户自有文档进行语义理解与推理的实验性 AI 工具&#xff0c;虽其官方定位并非直接面向脑机接口&#xff08;BCI&#xff09;领域&#xff0c;但其底…...

Linux内核安全加固:从编译配置构建系统防护基石

1. 项目概述&#xff1a;为什么我们需要关注内核安全配置&#xff1f;在服务器运维、嵌入式开发或者安全研究领域待久了&#xff0c;你可能会发现一个现象&#xff1a;很多系统被攻破&#xff0c;根源并不在于某个惊天动地的零日漏洞&#xff0c;而在于内核配置本身就没“锁好门…...

基于本地大模型的字幕翻译:LM Studio集成方案与实战优化

1. 项目概述&#xff1a;当本地大模型遇上字幕翻译最近在折腾本地大模型应用时&#xff0c;发现了一个挺有意思的场景&#xff1a;字幕翻译。很多朋友喜欢看海外影视剧或学习资料&#xff0c;但苦于没有高质量的中文字幕。在线翻译工具要么有字数限制&#xff0c;要么担心隐私泄…...

NotebookLM大纲自动生成失效真相(2024年最新API行为逆向分析报告)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM大纲自动生成失效现象全景速览 NotebookLM 的大纲自动生成功能在近期多个用户反馈中出现非预期中断&#xff0c;表现为输入结构化文本后无响应、输出空大纲或仅返回占位符标题。该问题并非全…...

ARM SMMU-700内存管理单元原理与优化实践

1. MMU-700 SMMU架构概述与典型应用场景内存管理单元&#xff08;MMU&#xff09;是现代计算机系统中不可或缺的核心组件&#xff0c;负责处理虚拟地址到物理地址的转换。在ARM架构中&#xff0c;系统级内存管理单元&#xff08;SMMU&#xff09;扮演着更为关键的角色&#xff…...

从Scratch图形化到Python代码:用树莓派给LeArm机械臂做二次开发实战

从Scratch图形化到Python代码&#xff1a;用树莓派给LeArm机械臂做二次开发实战 当Scratch积木块拼接的机械臂动作开始显得单调时&#xff0c;便是时候揭开底层控制的神秘面纱了。本文将带您跨越图形化编程的舒适区&#xff0c;用树莓派的Python环境重新定义LeArm机械臂的智能—…...

从零到一:基于HappyBase的HBase Python应用实战指南

1. 环境准备与基础配置 第一次接触HBase和HappyBase时&#xff0c;环境配置往往是最让人头疼的部分。记得我刚开始搭建环境时&#xff0c;花了整整两天时间才把所有服务调通。为了让各位少走弯路&#xff0c;我把这些年积累的经验都整理在这里。 首先需要明确的是&#xff0c…...

从零构建可定制对话系统:模块化架构与RAG实战指南

1. 项目概述&#xff1a;从零构建一个可定制的对话系统最近在折腾一个挺有意思的东西&#xff0c;我把它叫做“定制化聊天系统”。起因很简单&#xff0c;市面上现成的聊天机器人&#xff0c;无论是开源的还是商业的&#xff0c;总感觉差了那么点意思。要么是功能太臃肿&#x…...

用Ruby实现RISC-V模拟器:从指令集架构到交互式教学工具

1. 项目概述&#xff1a;一个为Ruby语言量身打造的RISC-V模拟器如果你是一名Ruby开发者&#xff0c;或者对RISC-V这个新兴的指令集架构充满好奇&#xff0c;那么你很可能已经听说过RuriOSS/rurima这个名字。简单来说&#xff0c;这是一个用Ruby语言实现的RISC-V指令集模拟器。但…...

CircuitPython REPL与库管理:嵌入式开发的效率利器

1. CircuitPython REPL&#xff1a;你的嵌入式开发“瑞士军刀” 如果你玩过Arduino&#xff0c;肯定对“上传-编译-看结果”这个循环不陌生。每次改一行代码&#xff0c;都得重新编译、上传&#xff0c;然后盯着串口看输出&#xff0c;效率低得让人抓狂。CircuitPython带来的R…...