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

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

用一句简单的话来说就是

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

这学期学习的单片机,看到的变量声明一直都是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

目录
相关文章
|
6月前
|
编译器
self.***和_***的使用和区别
self.***和_***的使用和区别
44 0
|
安全 C#
C#委托事件的区别
C#委托事件的区别
166 0
|
Java
While 与 do while 的区别
While 与 do while 的区别
78 0
||、&&、!的使用与区别
||、&&、!的使用与区别
132 0
|
JSON 数据格式
中writeValue和writeValueAsString的区别
writeValueAsString(obj):将传入的对象序列化为json,返回给调用者
|
算法 编译器 Linux
C与C++的区别
C与C++的区别
123 0
|
C语言
%C和%S区别
%C和%S区别
263 0
|
JavaScript 前端开发 索引
for...in和for...of的区别
前言 在JavaScript中遍历数组通常是使用for...i循环,在ES5具有遍历数组功能的还有forEach、map、filter、some、every、reduce、reduceRight等。 for...in和for...of是两种增强型循环,for...in是ES5标准,在ES6中新增了for...of的循环方式。
117 0
for...in和for...of的区别
setBackgroundImage 和 setImage的区别
setBackgroundImage 和 setImage的区别
212 0