unsigned long set;
/*set is after modified*/
set >>= 1;
我在内核系统调用中找到了它,但我不明白,它是如何工作的?
该表达式的set >>= 1;
意思set = set >> 1;
是set
by的右移位1
(>>
按位右移运算符checkBitwise Shift Operators的自身分配形式)。
假设是否set
为:
BIT NUMBER 31 n=27 m=17 0
▼ ▼ ▼ ▼
set = 0000 1111 1111 1110 0000 0000 0000 0000
然后,set >> = 1;
变量set
变成:
BIT NUMBER 31 n=26 m=16 0
▼ ▼ ▼ ▼
set = 0000 0111 1111 1111 0000 0000 0000 0000
注意位数已移位。
注意一个有趣的观点:因为set
是unsigned long
所以这个>>
操作应该是逻辑移位(无符号移位)逻辑移位不能保持数的符号位。
此外,由于您将所有位向右移动(朝着较低的有效数字方向),因此,向右移动一次=将数字除以2。
检查以下代码(仅演示最后一点):
int main(){
unsigned long set = 268304384UL;
set >>= 1;
printf(" set :%lu \n", set);
set = 268304384UL;
set /= 2;
printf(" set :%lu \n", set);
return 1;
}
并输出:
set :134152192
set :134152192
(注意:它并不意味着>>
并且/
都相同)
同样,您具有左移运算符<<=
,请检查其他可用的按位运算符和复合赋值运算符,还请检查以下部分:位表达式以及之间的区别:有符号/算术移位和无符号移位。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句