逻辑位移:
逻辑移位是指逻辑左移和逻辑右移,移出的空位都用0来补。
算数位移:
算术移位 就需要分有符号型值和无符号型值
对于无符号型值,算术移位等同于逻辑移位。
而对于有符号型值 ,算术左移等同于逻辑左移,算术右移补的是符号位,正数补0,负数补1。
C编译器采用的是哪一种?
答:在汇编指令中,shl和shr表示逻辑左移和逻辑右移,sal和sar表示算术左移和算术右移。
首先让我们来看一段代码:
#include <stdio.h>
int main()
{
int a = 65; //有符号整型 0100 0001
unsigned int b = 65; //无符号整型 0100 0001
a <<= 1; //1000 0010 130
b >>= 1; //0010 0000 32
char c = 127; //0111 1111
c <<= 3; //1111 1000 -8
char d = 127; //0111 1111
d >>= 3; //0000 1111 15
char e = -8; //内存以补码为1111 1000存储 源码为1000 1000 反码为1111 0111
e >>= 3; //-1 补码1111 1111 源码 1000 0001 反码1111 1110
printf("%d %d\n",a,b);//130 32
printf("%d %d\n",c,d);//-8 15
printf("%d\n