汇编语言/C51/C语言/C++中左移<<、右移>>的不同

2018-01-03 17:29:29 浏览数 (1)

汇编:

1.对于51单片机:RLC A;即将累加器ACC中内容左移1位,最低位被CY原始值替代,最高位移入进位标志CY

  中,同理还有RRC A。

具体使用:MOV A,#0FFH;

CLR C;

  RLC A;

2.对于8086:

(1)左移:SHL/SAL DST CNT 移位时操作数的最低位将移入0,最高位移入CF中,若左移若干位,则CF中只保留最后一次移出的内容。

(2) 右移:分为逻辑右移与算术右移。逻辑右移即SHR,用法与SHL同;算术右移即SAR,移位时操作数的最高位移入的是它原来的值,即最高位保持不变,最低位同样移入CF,主要用于带符号数的右移。

(3)循环移位:ROR/ROL/RCR/RCL DST CNT 类似51的移位指令,不过可以一次操作多位移动。

C51:

1.在C51中操作符为"<<",每执行一次左移指令,操作数最高位移入CY,CY中本来的数丢失,最低位补0,其他位依次向左移动1位。右移指令类同。

2.循环左移:使用C51库函数自带的 unsigned char _crol_(unsigned char c,unsigned b);实现将字符C循环左移b位,跟8086汇编的循环移位类同,同样右移函数为_cror_;

标准C:

1.">>",C语言中的右移运算,一般情况下是高位补零,但在处理有符号数的时候会因计算机系统的不同而不同。有符号数高位是零,则右移时高位补零;如果是负数即高位是1,那么有的系统会移入1(移动几位就补几个1),称算术右移(大部分系统),有的会移入0,称逻辑右移。

2."<<",C语言中的左移运算,无论是有符号数还是无符号数都是按照逻辑左移来操作,即向左移动若干位,低位补0即可。

C :

">>"和"<<"运算符如果没有被重载的情况下使用与标准C相同,如果被重载如输入输出流的操作,则变成输入输出操作符,如cout<<xxx; cin>>yyy; 当然也可以被重载为其他的操作。

0 人点赞