对于形如value = value | 1 << bit_number的表达式,目的是将指定位设为1。
value = value | 1 << bit_number
不明白的是:此表达式运算符优先级|大于<<吗,要是这样的话,例如:value为01011100,bit_number为3,可是计算之后很多位发生了变化,感觉不太对。那要是<<优先级大于|,那么先将bit_number左移一位,再进行或操作,感觉也是好多为发生了变化。所以,关键点是指定位指的是哪几个位?
|
<<
value
bit_number
先谢谢了。
小伙看你根骨奇佳,潜力无限,来学PHP伐。
首先,<<的優先權大於|。
其次你的理解有個錯誤:<<右移運算子是把運算元左側的參數右移右側參數個位置,也就是說1 << bit_number不是把bit_number右移1位,而是把1右移bit_number位。 舉你的例子,bit_number為3時,1 << bit_number的結果是00001000。再與value的01011100進行與操作,就能把右數第4位變成1了。
1 << bit_number
1
3
00001000
01011100
4
指定位就是某一位,這裡指的是從右往左數的第bit_number+1位
bit_number+1
http://jb51.net/article/37282.htm優先權
<<優先權高於|,運算之後value至多只有一位發生變化。
這個表達式的作用是將value的第bit_number為置1.
例如:value = 01010100, bit_number = 3,運算結果就是(01010100 | 1000) = 01011100
value = 01010100, bit_number = 3
(01010100 | 1000) = 01011100
<< 的優先順序比 | 高.
1 << bit_number 是把1 左移bit_number 位, 所以它結果是一個只包含一個1 的二進制數(它從右到左數的第bit_number 位是1). 例如, 1 << 3 得到的二進制數是1000.
1 << 3
這樣以後再和 value 按位作與運算, 作用應該一目了然了.
首先,
<<
的優先權大於|
。其次你的理解有個錯誤:
<<
右移運算子是把運算元左側的參數右移右側參數個位置,也就是說1 << bit_number
不是把bit_number
右移1
位,而是把1
右移bit_number
位。舉你的例子,
bit_number
為3
時,1 << bit_number
的結果是00001000
。再與value
的01011100
進行與操作,就能把右數第4
位變成1
了。指定位就是某一位,這裡指的是從右往左數的第
bit_number+1
位http://jb51.net/article/37282.htm
優先權
<<
優先權高於|
,運算之後value
至多只有一位發生變化。這個表達式的作用是將
value
的第bit_number
為置1.例如:
value = 01010100, bit_number = 3
,運算結果就是(01010100 | 1000) = 01011100
1
<<
的優先順序比|
高.1 << bit_number
是把1 左移bit_number 位, 所以它結果是一個只包含一個1 的二進制數(它從右到左數的第bit_number 位是1). 例如,1 << 3
得到的二進制數是1000.這樣以後再和
value
按位作與運算, 作用應該一目了然了.