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;
}