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

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

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

先来看下面这道题:

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
相关文章
|
1月前
|
人工智能 边缘计算 监控
【开源视频联动物联网平台】视频AI智能分析部署方式
【开源视频联动物联网平台】视频AI智能分析部署方式
109 3
|
7月前
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
603 1
|
3月前
|
供应链 NoSQL 物联网
链接全球数十亿台设备!物联网行业如何应对数据管理、实时分析和供应链优化的挑战?
物联网已成为面向未来的解决方案的关键组成部分,且其所蕴含的巨大经济价值潜力有待挖掘
1440 0
链接全球数十亿台设备!物联网行业如何应对数据管理、实时分析和供应链优化的挑战?
|
4月前
|
物联网 大数据
助力工业物联网,工业大数据之服务域:安装主题分析实现【三十】
助力工业物联网,工业大数据之服务域:安装主题分析实现【三十】
22 0
|
4月前
|
物联网 大数据
助力工业物联网,工业大数据之服务域:派单主题分析实现【二十九】
助力工业物联网,工业大数据之服务域:派单主题分析实现【二十九】
26 0
|
4月前
|
物联网 大数据
助力工业物联网,工业大数据之服务域:回访主题分析【二十八】
助力工业物联网,工业大数据之服务域:回访主题分析【二十八】
19 0
|
4月前
|
物联网 大数据
助力工业物联网,工业大数据之服务域:安装主题分析实现【二十七】
助力工业物联网,工业大数据之服务域:安装主题分析实现【二十七】
25 0
|
4月前
|
物联网 大数据
助力工业物联网,工业大数据之服务域:油站主题分析【二十六】
助力工业物联网,工业大数据之服务域:油站主题分析【二十六】
28 0
|
4月前
|
物联网 大数据 BI
助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
24 0
|
4月前
|
数据采集 SQL Oracle
助力工业物联网,工业大数据之DWD层构建:数据抽取分析【十一】
助力工业物联网,工业大数据之DWD层构建:数据抽取分析【十一】
49 0

相关产品

  • 物联网平台