- 位移操作
- 移位操作,一般出现在二进制,或者说只能出现在二进制中,当然不代表不可以在十进制内进行移位,只是从运算角度来说它也是将10进制转化为2进制后进行移位
- 左移<<
-
举例:十进制左移位
-
num=100,实际二进制为1100100
-
假设num<<=2(将num这个数字向左移2位并用=号赋值给num),实际情况是num的这个100转为二进制1100100的所有位向左移动2位,其结果为0010000就是10000,再将二进制结果10000转为10进制右侧末尾位已经是空则补0,其最后结果就是: num现在二进制结果是10000,十进制结果就是16。
-
-
举例:二进制移位(实际十进制和二进制并无区别,哪怕是其他进制,亦可)
-
0101 1100 向左位移3位,也就是全部数字整体位移结果为1110 0000,那么甚至都不需要去转为其他进制
-
PS:16进制位移。例:
-
16进制0x08>2进制 0000 1000<<3 == 0100 0000== 0x40
-
-
-
- 右移>>
-
举例:十进制左移位
-
num=100,实际二进制为1100100
-
假设num>>=2(将num这个数字向右移2位并用=号赋值给num),实际num为1100100整体位向右移动2位,但是左侧补位要根据实际数值的正负数进行补码
-
num>>=2其结果向右移动2位后正值为0001 1001 十进制结果为25
-
-
举例:二进制移位(实际十进制和二进制并无区别,哪怕是其他进制,亦可)
-
0110 0100 >>5,向右移位5位后结果:0000 0011 十进制值为3
-
num=100,num>>=5结果为3
-
下图为0110 0100向右移2位,从100变成了25

-
-
- 按位与
- 简要口诀:"全1则1,否则为0!" 记住口诀,就好办啦~
- a=1001 0010
- b= 0111 1110
- a&b实际结果就是0001 0010,相同位如果全部为1,<按位与>后在当前位的值才为1,否则全部为0
- 按位或
- 简要口诀:"有1则1,无1则为0!",就是说某一位是1,那么结果就是1,如果都没有1,那结果就是0
- a=1001 0010
- b= 0111 1110
- a |= b 1111 1110,只要有1,其位就是1,哪怕两个都是1,结果依然是1,无1为0
- ps:有的人可能会混淆理解,如果同位置都是1可能会错认为全是1那就是0,那并不是位或,而是"按位异或"
- 按位异或
- 简要口诀:"全0为0,全1也为0",意思是同位都是0那结果就是0,0^0=0,若同位是1,那就1^1还是0,但是若1^0或者0^1那就是1,也就是说只有0"按位异或"1才是1,或者1"按位异或"0才是1,否则其他情况结果均为0.
- a=1101 0110
- b=0001 0001
- a^b 就是1100 0111
- 按位取反
- 取反口诀就简单多了“取反取反,有正有反,正即是反,反就是正”。
- 简简单单的口诀,但是包含很多东西。
首先:有正有反,意思就是取反的整个全部过程中,只有正和反两个元素。只有1或者0两个元素,不可能也绝对不会包括除了正反以外的任何其他元素,例:abcdefg,这是无法取反的。仅只能使用数字!因数字才有正反! - 但是最简单的按位取反,也可能是在所有运算符里面最复杂中的其中一个。
- 这里面涉及到一个数字"0"
- 如果说1有负数,~1是 -1 ,那么0取反? ~0?难道是-0嘛?首先要确定确实有这么个数,也确实0取反就是-0,亦~0 = 0 或者 ~(-0) = 0 吗?
相关推荐
从补码视角解析有符号整数的左移与右移
本文从补码原理出发,深入解析有符号整数的左移与右移操作。通过实际案例展示移位操作在性能优化中的应用,揭示补码表示如何确保数学运算一致性,并指出常见的边界条件和编程陷阱,帮助开发者正确使用这一底层优化技术。
c语言分层理解(c语言操作符)
总结了很有几天,细节还是拿捏的可以的,个人觉得不错的,哈哈,望大佬们多多点赞加关注
IDA宏定义函数在逆向工程中的实战应用
本文深入探讨了IDA宏定义函数在逆向工程中的实战应用,详细解析了字节操作、符号扩展、位操作等核心宏的使用技巧。通过实际案例展示了如何利用宏定义简化二进制代码分析,提升逆向效率,特别适合逆向工程师和二进制安全研究人员参考。
C语言学习——位操作符
按位取反 移位操作 按位与 按位或 按位异或 拓展按位取反(~)任何进制的都转换成二进制,然后0变1,1变0 例如printf(“%u”,(unsigned char)~181);移位操作(>>,<<)符号的方向说明二进制移动的方向 例如 11>>2结果就是2按位与(&)例如 8&6 规律:一假全假,全真才真 结果为0 0 0 0即为0按位或(|)例如 8|6 规律:一真全真,全假才假
【STM32】从零构建串口IAP框架:BootLoader与App双向跳转实战解析
本文详细解析了STM32串口IAP框架的构建,重点阐述了BootLoader与App双向跳转的实战原理与实现步骤。内容涵盖Flash分区规划、中断向量表重定向、通信协议设计及固件升级流程,并针对跳转失败、程序跑飞等常见问题提供了解决方案,帮助开发者掌握产品级远程升级的核心技术。
从零到一:在Ubuntu 20.04上搭建ROS1与PX4无人机开发环境
本文详细指导如何在Ubuntu 20.04系统上搭建完整的ROS1与PX4无人机开发环境。内容涵盖ROS Noetic安装、PX4固件源码编译、MAVROS通信桥接以及QGroundControl地面站的配置,并通过Gazebo仿真完成全链路联调测试,为无人机算法开发与验证提供稳定可靠的基础平台。
Java的位操作
当读写二进制文件,或者要把非标准长度的整数与标准长度的整数互相转换时,就要用到大量的位操作,虽然看起来很简单,实际上里面却有很多细节很容易出错。 首先,Java有些标准跟C/C++是不同的: 1、Java采用高字节在前的方式读写数据,例如要把一个4字节的int数值写入文件时,它是按照从高字节到低字节的顺序写入的,读取的时候也是这样读出来。 而C/C++则采用平台相关的方式,在Wind
Unity学习笔记之【IK反向动力学操作】
反向动力学,简称IK。相较于正向动力学,反向动力学旨在子级对父级产生的影响。使用IK,可以实现根据目标位置或方向来计算并调整角色的关节(骨骼)链,以使角色的末端(如手臂、腿部等)达到预期的位置或取向。通过使用 Unity 的 IK 功能,你可以实现各种复杂的角色动画效果,如角色抓取、足部对齐、手臂跟随等。 2. 将所视的目标物体拖拽绑定 4. 实现效果如下 :移动角色时注释立方体 实现效果如下
java位操作(2)
当读写二进制文件,或者要把非标准长度的整数与标准长度的整数互相转换时,就要用到大量的位操作,虽然看起来很简单,实际上里面却有很多细节很容易出错。 首先,Java有些标准跟C/C++是不同的: 1、Java采用高字节在前的方式读写数据,例如要把一个4字节的int数值写入文件时,它是按照从高字节到低字节的顺序写入的,读取的时候也是这样读出来。 而C/C++则采用平台相关的方式,在Wind
【backtrader保姆级教学】投资组合回测
method1:探索投资组合的最有方案,使用蒙特卡洛模拟Markowitz模型。# 提取最小波动组合对应的权重, 并转换成Numpy数组。# 绘制收益-标准差的散点图,并用颜色描绘夏普比率。# 在收益-风险散点图中突出风险最小的点。:param any_day: 任意日期。# 将该点坐标显示在图中并保留四位小数。password = “替换密码”# 找到标准差最小数据的索引值。user = “替换账号”# 计算GMV投资组合收益。# 计算每项资产的夏普比率。# 设置无风险回报率为0。
麒麟linux离线源码编译安装zabbix-agent
离线源码编译安装zabbix-agent
C语言奇奇怪怪表达式‘abcd‘,及操作符详解
操作符及表达式相关内容
从QEvent到系统响应:EC如何成为硬件事件的隐形信使
本文深入解析嵌入式控制器(EC)如何作为硬件事件的隐形信使,通过QEvent机制将按键、合盖等物理事件转换为SCI信号,并经由ACPI架构触发操作系统响应。EC与BIOS紧密协作,实现了从底层硬件到系统层面的高效事件传递,是嵌入式开发和系统优化的关键技术。
java amp 操作_Java的位操作
当读写二进制文件,或者要把非标准长度的整数与标准长度的整数互相转换时,就要用到大量的位操作,虽然看起来很简单,实际上里面却有很多细节很容易出错。首先,Java有些标准跟C/C++是不同的:1、Java采用高字节在前的方式读写数据,例如要把一个4字节的int数值写入文件时,它是按照从高字节到低字节的顺序写入的,读取的时候也是这样读出来。而C/C++则采用平台相关的方式,在Windows平台采用低字节...
高通SA8295P音频接口深度解析:全面掌握SA8295P的LS-I2S、PCM/TDM与高性能音频处理技术设计
SA8295P提供丰富的音频接口选项,包括LS-I2S、PCM/TDM和HS-I2S接口,具备灵活的配置选项,适合各种高保真音频和高速数据传输应用。结合LS-I2S和PCM/TDM接口:在复杂的音频编解码器设计中,可结合使用LS-I2S和PCM/TDM接口,以处理和传输不同的音频数据流。使用HS-I2S接口:在软件定义无线电(SDR)系统中,高速I2S接口可处理高速数据流,如无线电信号的解码和处理。LS-I2S(低速I2S)接口是SA8295P的一部分,提供了丰富的音频数据传输选项。
uniapp - 详细手机端h5网页调用手机摄像头进行二维码识别扫描,在uniapp的H5移动端微信网页平台中,在浏览器中调用手机扫码功能详细教程,识别二维码并获取扫描结果(完整示例源码,一键复制即用
uniapp,h5,手机端网页,H5手机网页,uniapp开发h5实现扫码功能,uniapp微信h5网页扫码sdk使用教程,uniapp h5网页如何实现浏览器扫码,uniapp扫码功能怎么兼容h5_uniapph5怎么做扫码功能,uniapp的手机网页如何实现扫二维码一维码,浏览器H5实现js扫码,H5调用摄像头和扫一扫功能,亲测可用,H5调用本地摄像头实现扫一扫,uni-h5项目解决扫码功能,uniapp实现微信H5扫码,解决uniapp在H5端使用不能扫码问题,uni-app的h5扫码(二维码、条形码
《深入理解计算机系统》笔记 (2) 整数
整型数据类型 C语言支持多种整型数据类型。这些整型数据类型的典型取值范围大多是固定的,除了 long 之外:long 在 32 位机器上用 4 个字节表示,而在 64 位机器上用 8 个字节表示。 C中典型整型数据的取值范围(32位机)C中典型整型数据的取值范围(64位机)无符号数编码 对于长度为 w 的位向量(或表示为),只要把看作一个二进制表示的数,就是的无符号表示。二...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
java 操作位_Java的位操作
当读写二进制文件,或者要把非标准长度的整数与标准长度的整数互相转换时,就要用到大量的位操作,虽然看起来很简单,实际上里面却有很多细节很容易出错。首先,Java有些标准跟C/C++是不同的:1、Java采用高字节在前的方式读写数据,例如要把一个4字节的int数值写入文件时,它是按照从高字节到低字节的顺序写入的,读取的时候也是这样读出来。而C/C++则采用平台相关的方式,在Windows平台采用低字节...
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
C51运算符实战指南:从基础到Proteus仿真项目解析
本文详细解析C51运算符在单片机编程中的应用,从基础算术、逻辑判断到位操作全面讲解。通过Proteus仿真环境搭建和多个实战项目,包括LED状态控制、逻辑运算与硬件交互,帮助开发者掌握C51运算符的核心用法与调试技巧,提升单片机项目开发效率。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
Python 和 c++/c/java 对于负数的存储方式对比
Python 中的整型是补码形式存储的 Python 中 bin 一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,方便查看 Python 中 bin 一个负数(十六进制表示),输出的是对应的二进制表示。 1、在 python 里面,负数的存储方式 实例 a = bin(-3) print(a) a = bin(3) print(a) b = bin(...
C语言学习记录(12)数据在内存中的存储
整型在内存中存储是分为两种类型的,整数的二进制位有三种表示形式,原码、反码和补码,可以知道的是,如果是一个正数,他的原码、反码、补码是完全相同的;如果是一个负数,那么直接转换成二进制序列得到的是它的原码,符号位不变,其它位按位取反就是它的反码,反码+1就是负数的补码。根据国际标准,任意一个二进制浮点数V可以表示为V = (-1)^S * M * 2^E。其中(-1)^S表示符号位,0为正数,-1为负数。(类似于整数符号位的意义)M表示有效数字,一定是一个大于等于1,小于2的数字。2^E表示指数位。
《C陷阱和缺陷》总结
《C陷阱和缺陷》 第一章 1.1 =不同于== 在C语言中,=作为赋值运算,符号==作为比较,一般而言,赋值运算相对于比较运算出现的更加频繁。 同时,在C语言中赋值运算符号被作为一种操作符对待,因而重复进行赋值操作(如a=b=c)可以很容易的写出来。 这种使用上的便利性很可能导致一个潜在的问题,当程序员的本意是要做比较运算时,却可能无意中写成了赋值运算符,如: 例(1) if(x=y) bre...
php 0xffffffff,0xffffffff - 依睛(IT blog) 我回来了,PHPC/C++ LINUX - IT博客
今早ssjjll问我一个位操作的问题,原本以为非常easy的,可是程式的输出总是不尽人意。开始认为是编译器的错误,后来看文件才知道是自己学业不精,乃功力不足所致。失望!对C我一直认为全掌控了,而C++也练到了7、8重的境界,不料今日还是阴沟翻船。记下来,勿忘瓜耻!先看出现问题的代码:int a = 32;int x = 0xFFFFFFFF;cout << int(0xFFFFFFFF...
深入理解计算机系统 (第 1 节)
计算机系统,c语言,计算机组成原理,计算机网络,数据结构,算法,c++,内存管理
C语言进制转换实战:从原理到应用,掌握底层数据操作核心技能
进制转换是理解计算机数据存储与运算的基础概念。计算机内部所有数据本质上都以二进制形式存在,这是由硬件逻辑门电路(如晶体管)的两种稳定状态决定的。理解二进制、十六进制和八进制之间的转换原理,是掌握内存操作、位运算、数据序列化等核心技术的基石。这项技能在嵌入式开发、网络协议解析、文件格式处理及逆向工程等应用场景中具有极高的技术价值。本文围绕二进制计算和十六进制格式等热点,通过具体代码示例,系统讲解了在C语言中如何安全高效地进行不同进制数据的输入、输出、解释与转换,帮助开发者打通底层数据处理的任督二脉。
388



被折叠的 条评论
为什么被折叠?



