1.结论
逻辑左移与算数左移一样,右边统一添0
逻辑右移,左边统一添0
算数右移,左边添加的数和符号有关
c语言中的移位操作符,在左移时执行的是逻辑移位,在右移时执行的是算术移位。
那怎么用>>实现右移操作呢?
无符号数的移位操作都是执行的逻辑移位。那么要想用>>实现逻辑右移就可以将操作数强制类型转化为unsigned类型
2.实验
2.1. 结果截图:
2.2.代码
2.2.0.图一代码
#include <stdio.h>
int main()
{
int a = 0xfffffffe;
int b;
//逻辑左移----变成无符号数
b = (unsigned int)a <<1;
printf("逻辑左移 :%x\n",b);
//算术左移
b = a <<1;
printf("算术左移 :%x\n",b);
//逻辑右移----变成无符号数
b = (unsigned int)a >>1;
printf("逻辑右移 :%x\n",b);
//算术右移
b = a >>1;
printf("算术右移 :%x\n",b);
return 0;
}
2.2.1.图二的代码:
#include <stdio.h>
int main()
{
int a = 0xBffffffe;
int b;
//逻辑左移----变成无符号数
b = (unsigned int)a <<1;
printf("逻辑左移 :%x\n",b);
//算术左移
b = a <<1;
printf("算术左移 :%x\n",b);
//逻辑右移----变成无符号数
b = (unsigned int)a >>1;
printf("逻辑右移 :%x\n",b);
//算术右移
b = a >>1;
printf("算术右移 :%x\n",b);
return 0;
}