文章目录
0.写在前面
本博文为C语言_运算符1的继续,因此其编号顺序继承自原博文
2. C位运算符
2.3 位移运算符
位移运算符包括左移动<<
运算符 和 右移>>
运算符
2.3.1 左移运算符:<<
左移运算符<<
将其左侧运算对象每一位的值向左移动其右侧运算对象指定的位数。左侧运算对象移出左末端位的值丢失,用0填充空出的位置。
如:
(10001010)<< 2 //表达式
00101000 //结果值
该操作产生新的位值,但不改变原来运算对象的值
如:
int stonk=138;//stonk=10001010
int moveVal=2;
int newStonk = stonk<<moveVal;
printf("stonk=%d\nnewStonk=%d\n",stonk,newStonk);
2.3.2 右移运算符:>>
右移运算符>>
将其左侧运算对象每一位的值向右移动其右侧运算对象指定的位数。左侧运算对象移出右末端位的值丢失。
对于无符号类型,用0填充空出的位置;
对于有符号类型,其结果取决于机器,空出的位置可以用0填充,或者用符号位的副本填充
无符号类型实例:
(10001010)>>2 //表达式,无符号值
00100010 //所有系统都得到该值
有符号型实例:
(10001010) >> 2 //表达式 有符号值
00100010 //某些系统上的结果
同样的1000101/
(10001010)>> 2 //表达式值,有符号
11100010 //在另一些系统上的结果值
注意:
右移运算符在对有符号型数进行运算过程中,会因为机器型号问题,产生计算结果的差别
2.4 位移运算符使用场景
2.4.1 乘除法应用
使用位移运算符进行乘除法运算要比普通的乘除法运算符*、/
运算效率更高
乘法运算:
unsigned int val=