什么叫逻辑移位和算术移位
2011-07-25 23:20
134 查看
转自:http://romway.blog.163.com/blog/static/63898227200802945318599/1)算术移位 当乘数或除数是2n时,算术移位用来快速地完成对整数进行乘法或除法的运算。算数左移n位相当于乘上2n,执行方法是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补0。
2)逻辑移位 逻辑左移n位的执行方法,是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补"0"。 逻辑右移n位的执行方法是把原来数中的每一位都向右移动n个位置,右面移出的低位丢弃不要,左面高位空出的位置上全部补0。逻辑移位:不考虑正负号
算术移位:考虑正负号。
e g: 1000000000000000(右移2位) 0000000000000000(左移2位)
逻辑移位:0010000000000000 0000000000000000
算术移位:1110000000000000 1000000000000000
注:算术右移时,最前面是1时,补1,否则,补0。逻辑左移时,补0。
逻辑移位时,不用保留正负号(第一个),统一补0。逻辑移位(不管是左移位还是右移位) 都是空缺处补0
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
shl ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
shr ax , cl ; 结果 ax = 0001_1000_1110_1101
算术移位要保证符号位的不改变(算术左移位补0, 算术右移位看符号位)
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
sal ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 1111_1000_1110_1101
mov ax , 0100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 0000_1000_1110_1101
2)逻辑移位 逻辑左移n位的执行方法,是把原来的数中每一位都向左移动n个位置,左面移出的高位丢弃不要,右面低位空出的位置上全部补"0"。 逻辑右移n位的执行方法是把原来数中的每一位都向右移动n个位置,右面移出的低位丢弃不要,左面高位空出的位置上全部补0。逻辑移位:不考虑正负号
算术移位:考虑正负号。
e g: 1000000000000000(右移2位) 0000000000000000(左移2位)
逻辑移位:0010000000000000 0000000000000000
算术移位:1110000000000000 1000000000000000
注:算术右移时,最前面是1时,补1,否则,补0。逻辑左移时,补0。
逻辑移位时,不用保留正负号(第一个),统一补0。逻辑移位(不管是左移位还是右移位) 都是空缺处补0
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
shl ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
shr ax , cl ; 结果 ax = 0001_1000_1110_1101
算术移位要保证符号位的不改变(算术左移位补0, 算术右移位看符号位)
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
sal ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 1111_1000_1110_1101
mov ax , 0100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 0000_1000_1110_1101
相关文章推荐
- 算术移位 和 逻辑移位
- C语言 算术移位和逻辑移位
- 【C语言/C++】算术移位和逻辑移位以及一道移位的题目
- 【C语言/C++】算术移位和逻辑移位以及一道移位的题目
- 逻辑移位与算术移位的区别
- 算术移位与逻辑移位有什么区别? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 算术移位和逻辑移位
- C语言中的运算符>>和<<是算术移位而非逻辑移位
- C/C++ 算术移位&&逻辑移位 int && long long间的转化
- 逻辑移位和算术移位
- 逻辑移位 算术移位
- 算术移位和逻辑移位
- 算术移位与逻辑移位有什么区别?
- 【转】算术移位和逻辑移位的区别
- 逻辑移位与算术移位
- 逻辑移位与算术移位的区别
- 算术与逻辑移位
- 逻辑移位与算术移位
- 算术移位和逻辑移位
- Visual Basic 2008 运算符(算术、关系、逻辑、字符串连接、赋值、移位)——汇总