逻辑移位与算术移位的区别

简介: 用一句简单的话来说就是:逻辑移位不需要考虑符号位,算术移位需要考虑符号位,我们都知道。数在计算机中都是以补码的形式来存储的,这才造成了逻辑移位和算术移位的的差别。

用一句简单的话来说就是

逻辑移位不需要考虑符号位,算术移位需要考虑符号位,我们都知道。数在计算机中都是以补码的形式来存储的,这才造成了逻辑移位和算术移位的的差别。

这学期学习的单片机,看到的变量声明一直都是unsigned。这才明白了,为什么要定义为无符号,因为在程序中可能会用到移位运算。

看个简单的例子

10000010算术右移1位11000001 (算术移位时符号位不动)

10000010逻辑右移1位01000001

举个例子:

int funcl(unsigned word)

{

return (short)((word<<8)>>8);

}

word  机器数

 0080H

 00FFH

 0100H

对题目进行简单的改造:

int funcl(unsigned word)

{

return ((short(word<<8))>>8);

}

short是一元运算符,<<是双目运算符  单目运算符的优先级高于双目运算符,

word  机器数

 0080H

 00FFH

 0000H

int funcl(unsigned word)

{

return ((short)(word<<8)>>8);

}

word  机器数

 0080H

 00FFH

 0100H

目录
相关文章
|
16天前
|
存储 前端开发 JavaScript
for...in、for...of、for...Each的详细区别!
for...in、for...of、for...Each的详细区别!
|
3月前
|
SQL 安全 Java
myabtis中#{} 和 ${} 的区别是什么
myabtis中#{} 和 ${} 的区别是什么
|
7月前
bis和bic区别与实现
bis和bic区别与实现
56 0
|
8月前
|
安全 C#
C#委托事件的区别
C#委托事件的区别
|
SQL Java 数据库连接
#{}与${}的区别
面试的时候经常碰到这样的题目:#{}和${}的区别是什么? 回答这样的问题首先要知道这两个符号是干嘛用的,然后再通过实例来解释两者的不同,这样才能更好的说服面试者。
88 0
|
算法 IDE Unix
C和C++的区别
C和C++的区别
154 0
setBackgroundImage 和 setImage的区别
setBackgroundImage 和 setImage的区别
163 0
<T>和<?>区别
简要讲述一下<T>和<?>区别,以及<T>的用法
<T>和<?>区别
@EnableEurekaClient上有@EnableDiscoveryClient区别
@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。
905 0