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

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

用一句简单的话来说就是

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

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

目录
相关文章
|
3月前
|
存储 缓存 移动开发
uinapp的setStorageSync和setStorage的区别
uinapp的setStorageSync和setStorage的区别
|
4月前
|
安全 数据安全/隐私保护 网络架构
CAPWAP 和 LWAPP 的区别
【8月更文挑战第24天】
124 0
|
6月前
for in 和 for of的区别
for in 和 for of的区别
2039 3
|
7月前
|
索引
for each和for of的区别
for each和for of的区别
52 0
c++ *和&的区别
c++ *和&的区别
345 0
写出 && 和 & 的区别。
写出 && 和 & 的区别。
107 0
&和&&的区别
&和&&的区别
197 0
|
编解码 网络性能优化 存储
VBR与CBR的区别是什么?
<pre id="best-content-153760330" class="best-text mb-10">VBR是动态<a target="_blank" class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E7%A0%81%E7%8E%87&amp;fr=qb_search_exp&am
10861 1
|
关系型数据库
Where and Having区别
Where和Having的异同 (1)where是查询返回结果之前进行过滤的 (2)having是查询返回结果之后,对结果进行过滤的 (3)在SQL中增加 HAVING 子句原因是,where关键字无法与聚合函数一起使用,having子句常跟group by一同使用,过滤分组...
1508 0

热门文章

最新文章