C51中左移右移有两种方式
一:(其实应该叫循环左移和循环右移)
“_crol_(移动对象,左移的位数)"是左移函数,操作效果是:向左移动,最高位移动到最低位。
例如:
1110左移一位? _crol_(1110,1);——移动后是1101,最高位的1移动到了最低位。
二:(其实应该叫逻辑左移和逻辑右移)
例如:使用的是1110<<1语句,移动之后是1100,最低位补0.
C语言中的(其实应该叫算数左移和算数右移)
例如:5<<3=40,其实就是101<<3 = 101000 = 2^5+2^3 = 40
逻辑左移时,最高位丢失,最低位补0;
逻辑右移时,最高位补0,最低位丢失;
算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。
算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位;
循环左移时,将最高位重新放置最低位
循环右移时,将最低位重新放置最高位
使用循环操作的一个目的就是把每一位连续放到最左边,以判定数据的符号。如果要把一个数字的高位部分和低位部分互换,采用一位操作就很方便,速度很快。
C51中左移右移有两种方式
一:(其实应该叫循环左移和循环右移)
“_crol_(移动对象,左移的位数)"是左移函数,操作效果是:向左移动,最高位移动到最低位。
例如:
1110左移一位? _crol_(1110,1);——移动后是1101,最高位的1移动到了最低位。
二:(其实应该叫逻辑左移和逻辑右移)
例如:使用的是1110<<1语句,移动之后是1100,最低位补0.
C语言中的(其实应该叫算数左移和算数右移)
例如:5<<3=40,其实就是101<<3 = 101000 = 2^5+2^3 = 40
逻辑左移时,最高位丢失,最低位补0;
逻辑右移时,最高位补0,最低位丢失;
算术左移时,依次左移一位,尾部补0,最高的符号位保持不变。
算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一个符号位;
循环左移时,将最高位重新放置最低位
循环右移时,将最低位重新放置最高位
使用循环操作的一个目的就是把每一位连续放到最左边,以判定数据的符号。如果要把一个数字的高位部分和低位部分互换,采用一位操作就很方便,速度很快。
举报