这个“ >> =”运算符在C中是什么意思?

罗托姆92
unsigned long set;
/*set is after modified*/
set >>= 1;

我在内核系统调用中找到了它,但我不明白,它是如何工作的?

Grijesh Chauhan

该表达式的set >>= 1;意思set = set >> 1;setby的右移位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

注意位数已移位。

注意一个有趣的观点:因为setunsigned 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这个比较是什么意思?

来自分类Dev

这个typedef定义是什么意思?

来自分类Dev

这个定义是什么意思?

来自分类Dev

这个运算符的名称是什么:php中的“->”?

来自分类Dev

new(这个)是什么意思?

来自分类Dev

这个jQuery代码是什么意思?

来自分类Dev

这个符号“ [=]”在C ++中是什么意思?

来自分类Dev

这个Perl语法是什么意思?

来自分类Dev

这个宏是什么意思?

来自分类Dev

ANSI这个序列是什么意思?

来自分类Dev

Cypher中的这个运算符(=〜)是什么意思?

来自分类Dev

这个运算符是什么意思?/ =

来自分类Dev

Java这个错误是什么意思?

来自分类Dev

这个C ++运算子是什么意思?

来自分类Dev

这个C宏是什么意思?

来自分类Dev

这个问号(水银)是什么意思?

来自分类Dev

这个错误是什么意思?

来自分类Dev

这个语法是什么意思?

来自分类Dev

这个运算符是什么?在Dart?

来自分类Dev

这个运算符在c ++中做什么?

来自分类Dev

这个for循环是什么意思?

来自分类Dev

这个错误是什么意思?

来自分类Dev

这个运算符的名称是什么:php中的“->”?

来自分类Dev

这个符号“ [=]”在C ++中是什么意思?

来自分类Dev

C#中的“ <<”运算符是什么意思

来自分类Dev

这个红宝石运算符是什么意思$?

来自分类Dev

这个运算符`=>`在verilog中是什么意思

来自分类Dev

这个符号在 C++ 中是什么意思?

来自分类Dev

这个 while 循环是什么意思 with or 运算符和条件