今天在刷题的时候遇到了需要用到>>的情况,然后发现几种不同的写法代表的含义是不一样的,在这里总结一下:
-
表示将i >> j
i
右移j
位。>>
会将i
的二进制表示向右移动j
位,左边空出的位用0
来填充(对于无符号数)或者用符号位(即最高位)来填充(对于有符号数)。这个操作的结果是一个整数。 -
这个表达式首先执行i >> j & 1
i >> j
,然后将结果与1
进行位与操作&
。位与操作会将两个数的二进制表示进行逐位与操作,只有当两个相应的位都是1
时,结果位才是1
,否则是0
。由于1
的二进制表示只有最低位是1
,所以这个操作实际上是检查i >> j
的结果的最低位是否为1
。如果最低位是1
,则结果为1
;否则为0
。这个表达式的结果是一个整数。 -
(i >> j) == 1
这个表达式首先执行括号内的i >> j
,然后检查结果是否等于1
。这是一个比较操作,结果是一个布尔值true
或false
。如果i >> j
的结果是1
,则表达式结果为true
;否则为false
。
总结一下:
i >> j
是一个位运算,返回一个整数。i >> j & 1
也是一个位运算,但它只关心i >> j
结果的最低位是否为1
,返回一个整数。(i >> j) == 1
是一个比较操作,检查i >> j
的结果是否等于1
,返回一个布尔值。