欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

逻辑位移和算术位移 逻辑位移算术位移

程序员文章站 2022-05-28 08:43:36
...
1、
在C语言标准中,有两种位移分别为算术位移和逻辑位移。

逻辑位移:在位移运算符(>>和<<)之前的数是无符号数,编译产生的汇编指令是逻辑位移。

算术位移:在位移运算符之前的数是有符号数,编译产生的汇编指令是算术位移。

左移:两种位移都在右边补0。

右移:逻辑位移在左边补0,算术位移在左边补符号位。

2、
在C语言中,涉及位移的运算符有2个,>>表示右移,<<则表示左移。

而汇编指令中,SHL和SHR表示逻辑左移和逻辑右移,SAR和SAL表示算术左移和算术右移。

其中,逻辑左移和算术左移都是寄存器二进制位整体向左移动,并在右边补0。

而右移则不同,逻辑右移是整体向右移,并在左边补0,而算术右移则是根据原符号位的值补与其相同的值。

那么如何在C语言中分别实现逻辑和算术位移呢?根据C标准,如果在位移运算符左边的变量是有符号数,如int,char,short等,编译产生的 汇编指令是算术位移指令,如果该变量是无符号数,如unsigned int,unsigned char等,编译产生的汇编指令则是逻辑位移指令。



参考网址:
https://blog.csdn.net/qq_39979605/article/details/79855718
https://www.cnblogs.com/hnrainll/archive/2011/07/06/2099068.html