逻辑移位与算术移位的区别
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
逻辑移位不需要考虑符号位,算术移位需要考虑符号位,我们都知道。数在计算机中都是以补码的形式来存储的,这才造成了逻辑移位和算术移位的的差别。
这学期学习的单片机,看到的变量声明一直都是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
相关文章推荐
- slf4j初始化绑定源码分析
- java枚举使用详解
- 程序员入门有年龄限制吗?
- <meta>标签指定浏览器渲染模式
- 同一个ImageView显示不同的图片(LevelDrawable)
- Java学习笔记之《前言》
- SQLite可视化管理工具汇总
- 交换技术(swaping) 视频11
- 直流电机调速
- boost assert分析
- 回信--5.19
- 设计模式之观察者模式之一、引出观察者mosh
- CSS filter滤镜属性
- mybatis_user_guide(5) 动态 SQL
- SPOJ 694 Distinct Substrings
- 我的自动化日记1——元素定位过程中的意外事故
- EasyUI初识
- TCP的SO_LINGER 选项
- asmack项目介绍
- js的HTML属性操作