您的位置:首页 > 其它

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

2016-06-19 22:56 429 查看
用一句简单的话来说就是

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

这学期学习的单片机,看到的变量声明一直都是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: