物联网学习:算术移位和逻辑移位实现分析

简介: 物联网学习:算术移位和逻辑移位实现分析

算术移位和逻辑移位实现分析

先来看下面这道题:

unsigned int i = 8;
int main()
{
i = i<<3;//输出结果i = 64
}
上面的变量i是采用逻辑移位还是算术移位呢?

逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题

算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变

但我们好奇的是“i<<3”和“i>>3”到底采用的是算术还是逻辑移位呢?其实单从C语言本身来看可能没有太多突破,因为C最终会被编译器编译成目标平台的汇编代码,所以必须要结合编译器和汇编程序来分析以上代码,下面主要从反汇编入手分析,对ARM平台下有关移位的指令有:

LSL(逻辑左移)

LSR(逻辑右移)

ROR(循环右移)

ASL(算术左移)

ASR(算术右移)

RRX(带扩展的循环右移)

下面我们来看看上面那段C程序的反汇编结果:

screenshot

结论:说明无符号数采用的是逻辑左移。

那么经过测试我们发现以下几份代码反汇编结果和上面的情况是一样的,都是逻辑左移:

再来看一下:

signed int i = 8;
int main()
{
i = i<<3;//输出结果i = 64
}
signed int i = -8;
int main()
{
i = i<<3;//输出结果i = -64
}
结论:说明不管是否有无符号类型,也不管值的正负,均采用的是逻辑左移。

接下来看看右移:

unsigned int i = 8;
int main()
{
i = i>>3;//输出结果i = 1
}
反汇编结果:

screenshot

结论:说明无符号数采用的是逻辑右移。

再看看有符号数的右移操作:

signed int i = 8;
int main()
{
i = i>>3;//输出结果i = 1
}
反汇编结果:
screenshot

结论:说明有符号数采用的是算术右移。

经过测试发现以下代码反汇编结果和上面的情况也是一样的:

signed int i = -8;
int main()
{
i = i>>3;//输出结果i = -1
}
结论:说明只要是有符号数,不管值是正还是负,右移时采用的都是算术右移。

疑问:按照移位补0的原则,为何左移都是逻辑移位呢?

答疑:先看看“-8”和“8”在计算机内存中的值分别是:

0xfffffff8
0x8
由于计算机均按补码保存数值,所以不管符号正负,左移对于符号位并不产生影响,而右移则就不同了,无符号数怎么右移都不影响符号位,但是有符号数逻辑右移时高位补0将改变符号位,所以只能采用算术右移。

总结:只有有符号数右移才采用算术右移,否则其它情况都采用逻辑移位操作(逻辑左移或逻辑右移)。原来只要明白计算机是以补码方式保存数值的,就一切都清楚了。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
6月前
|
人工智能 边缘计算 监控
【开源视频联动物联网平台】视频AI智能分析部署方式
【开源视频联动物联网平台】视频AI智能分析部署方式
352 3
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
756 1
|
5月前
|
人工智能 物联网 5G
物联网投资趋势:市场分析与预测
【6月更文挑战第7天】物联网驱动全球经济,市场规模迅速扩大,尤其在智能家居、智能工业、智能医疗领域。新兴商业模式和投资机会涌现,如平台整合、核心技术研发。5G普及、AI融合及物联网安全是未来投资趋势。Python示例代码显示了与物联网设备交互的可能性。尽管面临技术更新快、竞争激烈等挑战,投资者需了解行业趋势、关注创新企业、评估风险和回报,以实现长期投资成功。物联网投资前景广阔,将成为投资领域关键部分。
79 2
|
4天前
|
SQL 监控 物联网
ClickHouse在物联网(IoT)中的应用:实时监控与分析
【10月更文挑战第27天】随着物联网(IoT)技术的快速发展,越来越多的设备被连接到互联网上,产生了海量的数据。这些数据不仅包含了设备的状态信息,还包括用户的使用习惯、环境参数等。如何高效地处理和分析这些数据,成为了一个重要的挑战。作为一位数据工程师,我在一个物联网项目中深入使用了ClickHouse,以下是我的经验和思考。
16 0
|
20天前
|
安全 网络协议 物联网
物联网僵尸网络和 DDoS 攻击的 CERT 分析
物联网僵尸网络和 DDoS 攻击的 CERT 分析
|
4月前
|
安全 物联网 物联网安全
物联网安全风险分析
### 物联网安全概览 #### 背景 物联网设备因其默认安全设置薄弱,成为黑客攻击目标。随着OT网络中物联网角色增多,这些设备临近关键系统,攻击者利用其发起攻击。 #### 物联网定义 物联网(IoT)是通过信息传感设备连接物品与互联网,实现智能化识别、定位、跟踪的网络。涵盖智能家居、可穿戴设备到复杂工业系统。 #### 攻击者偏好 物联网设备易受攻击,2022年针对物联网的网络攻击大幅增长,如DDoS攻击和恶意软件事件。物联网端点的安全疏忽使其成为恶意软件传播途径。 #### 制造业面临风险 制造业因物联网设备被攻击,导致勒索软件攻击增加,因生产中断造成的损失更大。
物联网安全风险分析
|
4月前
|
机器学习/深度学习 数据可视化 物联网
物联网设备的数据可视化与分析:解锁未来智能世界的钥匙
【7月更文挑战第6天】物联网设备的数据可视化与分析是解锁未来智能世界的关键。通过不断探索和实践,我们可以更好地利用物联网数据,推动技术创新,提升社会运行效率,为人们的生活带来更多便利和惊喜。面对技术挑战,我们应保持开放心态,积极学习新技术、新方法,不断优化数据可视化与分析的流程和效果,为物联网的繁荣发展贡献力量。
|
4月前
|
数据采集 存储 运维
物联网设备的数据处理与分析技术探讨
【7月更文挑战第2天】探索物联网(IoT)数据处理技术,涵盖数据采集(传感器、无线通信)、存储(分布式系统、NoSQL)、处理(清洗、压缩、转换)和分析(描述性、聚类、分类、异常检测)。未来趋势涉及AI集成、边缘计算、多模态处理和系统自主化。随着技术演进,期待更智能、高效的解决方案。
|
6月前
|
传感器 数据采集 安全
物联网的五层架构分析
物联网五层架构,包括感知层、网络层、数据层、应用层和业务层,扮演着关键的角色。
300 2
|
6月前
|
网络协议 物联网 Java
Go与Java:在物联网领域的适用性分析
本文对比分析了Go和Java在物联网领域的适用性。Go语言因其轻量级、高效和并发特性,适合资源受限的物联网设备,特别是处理并发连接和数据流。Java则凭借跨平台性、丰富的生态系统和企业级应用能力,适用于大型物联网系统和复杂业务场景。两者在物联网领域各有优势,开发者可根据项目需求选择合适的语言。

相关产品

  • 物联网平台