C/C++ 中的移位操作

编程过程中常见移位操作 位操作,二进制补码,双值交换,位反转,GRAY码,常见的移位操作,可以比较方便的快速的进行运算 立即下载

1、什么样的数据类型可以直接移位

char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以进行移位操作,而double、float、bool、long double则不可以进行移位操作。

2、有符号数据类型的移位操作

对于char、short、int、long这些有符号的数据类型:

对负数进行左移:符号位始终为1,其他位左移
对正数进行左移:所有位左移,即 <<,可能会变成负数
对负数进行右移:取绝对值,然后右移,再取相反数
对正数进行右移:所有位右移,即 >>


3、无符号数据类型的移位操作

对于unsigned char、unsigned short、unsigned int、unsigned long这些无符号数据类型:

没有特殊要说明的,使用<< 和 >> 操作符就OK了

结束语

8086 中存在逻辑移位、算术移位,而C\C++中的移位似乎既不是逻辑移位,也不是算术移位。

比如-1,我们若对它右移1位,C的结果仍旧是-1,事实上无论右移多少位始终是-1,逻辑移位得到的结果(8位表示)应该是-128,所以这点要注意。

一个固定翼飞机仿真程序带你系统性上手如何实现配平(工具箱+脚本) 老规矩,该博客所用的模型和脚本已上传至百度网盘,名字为“固定翼配平训练例子”,自己自取。 阅读详情

相关推荐

小米CyberGear微电机驱动代码(CAN总线驱动,含开源地址)

小米CyberGear微电机驱动代码(ROS下的CAN总线驱动,含开源地址)

2302_80751833的博客 4434

C学习:无符号有符号数的移位问题分析总结

对于有符号数来说,移位操作在C语言标准中行为未定义,不同平台不一样,取决于编译器类型。无符号数统一按逻辑移位实现,行为确定。

来知晓的博客 2724

SerDes硬件设计原理介绍

接收端:外部差分串行数据------线性均衡器----(CDR从数据中恢复出采样时钟)-----解串器(串行信号转并行信号)-------8B/10B的解码器或解扰器-----FIFO-----FPGA接受差分并行数据。发送端: FPGA发送差分并行数据----FIFO------8B/10B编码器或者扰码器-----串行器(并行信号转串行信号)-----均衡器(滤波)--------TX串行信号差分外发。串行器:8bit的并行数据----2bit的并行数据----1bits的串行数据。

weixin_42304393的博客 1108

总结C++移位运算

总结C++移位运算

qq_45552815的博客 1601

unity pc运行包导入glb

本文介绍了在Unity中实现GLB/GLTF模型动态导入的方法。主要使用glTFast插件进行模型导入,配合StandaloneFileBrowser实现文件选择功能。文章提供了详细的插件安装方式(包括国内镜像源),并给出了核心导入脚本代码。脚本实现了模型加载、父对象设置、材质修复等功能,解决了常见的材质显示异常问题。该方法支持编辑器和PC平台,兼容不同版本的glTFastAPI,通过简易UI操作即可完成模型导入,适合需要运行时加载3D模型的Unity项目开发。

懒懒的蓝的博客 544

SPSS&Mplus—共同方法偏差(Common Method Bias)控制与检验

共同方法偏差(Common Method Bias)的控制方法:程序控制(Procedural)和统计控制(Statistical)。

m0_54401011的博客 1万+

C语言移位运算符精度问题

如果有写过单片机或者嵌入式系统的裸机驱动,很多编译器对于除(/)操作需要执行多个指令才能完成。于是为了节省指令,经常把除(/)的操作转换成向右移位来完成。但是,在运用移位运算符的过程中需要考虑到精度的问题,有可能在移位的过程中,损失掉了精度。 正是没注意到该问题的存在,导致了在一个项目中一个bug的产生。特此记录。等价左右移位大家都知道左移n位相当于乘以2的n次方,右移m位相当于除以2的m次方。

www.wowothink.com的专栏 3334

ABP多租户实现

abp会调用ITenantStore.Find(Guid)方法去查tenant是否存在。要骗过abp就得自己实现ITenantStore并替换原来的实现。abp会自动解jwt里的tenant id,并且尝试验证它。这时候我们之前实现的ITenantStore就可以骗过abp。你要不想骗它也成,反正这个类是可以依赖注入的,你爱咋验证就咋验证。不用open id dict,只用jwt,让abp轻起来。在原来生成jwt的地方加入tenantId。module上也要加DependsOn。

m0_46704355的博客 471

C++中位域的说明

一、位域    有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同

leo115的专栏 2022

Arduino、ESP32驱动SFA40甲醛传感器(气体传感器篇)

SFA40甲醛传感器是一款基于盛思锐电化学原理的专业HCHO检测模块,具备卓越的抗酒精干扰能力(乙醇交叉敏感度<0.3%)、高达±20ppb的检测精度及0~1000ppb的宽量程。该传感器内置SHT4X温湿度传感器进行自动补偿,确保数据的长期稳定性;其小尺寸、低功耗的特性,可快速集成至智能家居、空气净化器、物联网环境监测等系统中,实现对甲醛浓度的精准、可靠监测。

不脱发的程序猿 302

Freeswitch DTMF 按键无法接收问题修复

freeswitch 在接收到 update后,会更新成新的 payload type,但是给的200响应,仍然是旧的,这时候就会导致手机侧认识需要发送旧的payload,所以发到 fs 后就会导致直接丢包,不去处理RTP包了。呼叫时需要设置通道变量 rtp_manual_rtp_bugs=ACCEPT_ANY_PAYLOAD ,这时候FS 就不会对包的payload进行判断,直接判定通过。应该修复 freeswitch 给响应时,应该根据收到的 payload 发送给手机,但是一直未找到正确的路径。

2301_81507069的博客 373

C++程序右移32位不执行

uint32_t执行超过32位的位移时如下,语句将不会执行。

小小魔姬 1127

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7323

C/C++ 中的移位操作拾遗

引言最近笔者一直在做JPEG的解码工作,发现用完全使用哈夫曼树进行解码比较费时,而使用表结构存储编码和值的对应关系比较快捷,但是也存在比较难处理的地方,比如解码工作通常是以位为单位的操作,这里必然会涉及到移位操作,而笔者之前对位的操作很少,经验很欠缺,经过这次历练终于发现了一个自己曾经忽视的东西,那就是C/C++中的移位操作容易出错的情况。1、什么样的数据类型可以直接移位char、sh

7204

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C/C++ 中的移位操作总结

最近学习过程中发现数据的移位操作很是重要,因此便需要总结一番。 1、什么样的数据类型可以直接移位 char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都可以进行移位操作,而dou

王伟挺的专栏 5281

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

一个C/C++中的移位操作问题

摘要:关于c/c++中由于CPU位宽造成的一个移位操作问题,b = ~a>>1中b的值的问题。 先看一段代码: 1: #include 2: 3: int main() 4: { 5: unsigned char a = 0xAA ; 6: unsigned char b = 0x00 ; 7: b = ~a>>1 ; 8: printf("0x%X",b) ;

寂竹 6971

编程参考 - C/C++中的左右移位操作

左移右移位运算符Left shift and right shift operators (>)位移运算符是右移运算符(>>),它将整数或枚举类型表达式的位移到右边,左移运算符(), which moves the bits of an integer or enumeration type expression to the right, and ......

guoqx的专栏 1万+

C/C++中的一个巨大的坑:移位操作的优先级问题

对于下面的表达式,运算结果应该是多少? int result = 4 >> 1 + 1; 我不止一次地认为运算结果为4/2+1=3。而实际上,运算结果为:4/4=1。这是由于移位操作的优先级比加法运算低。 上图引自百度百科 上图引自百度百科

chfe910的专栏 9998

移位操作及其在数据类型转换中的作用

一.对移位操作的基本概述: 1、什么样的数据类型能够直接移位 char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long都能够进行移位操作。而double、float、bool、lo...

weixin_30919571的博客 834

c语言 右移位什么情况补1,关于移位操作,该如何处理

关于移位操作请教一下各位关于移位操作的问题。我现在被搞得有点晕了1.C/C++和JAVA中的移位操作规则是不是不一样?2.关于算术移位和逻辑移位。左移时候比较好理解,都是末尾补0.但是右移的时候我就有点晕了。正常情况逻辑移位是不管符号位,直接高位补0;而算术移位是根据符号位来补高位的。比如11001右移2位。逻辑移位结果是00110,而算术移位结果是11110。(这个应该对的吧?)但是我好想隐约记...

weixin_34698042的博客 3201

C/C++是算术移位

C/C++中移位操作完全等同于汇编中的“算术移位指令”,而不等同于“逻辑移位指令”!具体来说,跟前面一篇关于数据类型扩展的文章很相似,左移全部是补0,这毫无疑问!在右移操作中,最左侧补0还是补1,完全取决于操作数本身是不是符号数。如果是无符号数,则全部是补0,如果是有符号数,则补符号位上的数字,负数补1,正数补0;也就是说,对于有符号数,无论怎么移,符号位保持不变!!! 

gaoteng1984的专栏 1718

C/C++中的逻辑右移和算术右移

逻辑左移和算术左移,都是在右边补0,效果一样。左移1bit,相当于原数 乘以2。 逻辑右移:右移后,左边补0 算术右移:右移后,左边补符号位,添加的位与原数的符号位相同,正数(0算作正数的一个)补0,负数补1。算术右移1bit,相当于原数 除以2。 C/C++中,对于无符号数,可以认为是逻辑左移和逻辑右移。对于有符号数,可以认为是算术左移和算术右移, 要对一个有符号数 执行逻辑右移,可以先...

zgcjaxj的博客 7084

C/C++移位操作

C/C++移位操作1.无符号数移位2.有符号数移位总结 1.无符号数移位 a.规定移动的位数必须是正整数,并且不得大于或者等于类型的位宽,否则行为不确定。 例如: unsigned char移动的位数必须是[0,7] unsigned short移动位数必须是[0,15] unsigned long移动位数必须是[0,31] … b.无论左移还是右移,移出位数范围的丢掉,然后补0. 移动的位数可以是0,结果与原值相同。左移n位等价于乘以2的n次方。 右移n位等价于除以2的n次方。当左移丢掉最左边的1时,在

imhikaru的专栏 2583

c++ 位移 注意事项

以前一直认为C/C++中的右移操作全部是在左侧补0,今天看到LOWORD宏和HIWORD宏的源代码时, 想起了C/C++中移位的问题,所以编了个小程序试验了一下,发现以前的认识有问题。今天得出的正确结论用一句话来概括就是:C/C++中移位操作完全等同于汇编中的“算术移位指令”,而不等同于“逻辑移位指令”!具体来说,左移全部是补0,这毫无疑问!在右移操作中,最左侧补0还是补1,完全取决于操作数本

客天品空 1272

C/C++中的有符号和无符号的位运算问题

是对C/C++下面的结果感到困惑? printf("%d\n", ((unsigned char)~0 >> 1)); //结果为127 printf("%d\n", -((unsigned char)~0 >> 1));  //结果为-127 printf("%d\n", ((signed char)~0 >> 1));  //结果为-1 printf("%d\n", -((signed

华时纳 6905

算术移位和逻辑移位详解

大部分的C编译器,用移位的方法得到代码比调用乘除法子程序生成的代码效率高。 移位运算是将数值向左向右移动,对于十进制来说就是实现放大十倍和缩小十倍的效果,而对于二进制而言就是放大两倍和缩小两倍的效果 整数的乘除法 一个自己曾经忽视的东西,那就是C/C++中的移位操作容易出错的情况。 1、什么样的数据类型可以直接移位 char、short、int、long、unsigned char、unsig...

拾遗阁 3万+
上一篇: ofstream和ifstream详细用法
下一篇: WIN7下 QT中文乱码问题
saro21
博客等级 码龄15年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值