对于形如value = value | 1 << bit_number
的表达式,目的是将指定位设为1。
不明白的是:此表达式运算符优先级|
大于<<
吗,要是这样的话,例如:value
为01011100,bit_number
为3,可是计算之后很多位发生了变化,感觉不太对。那要是<<
优先级大于|
,那么先将bit_number
左移一位,再进行或操作,感觉也是好多为发生了变化。所以,关键点是指定位指的是哪几个位?
先谢谢了。
对于形如value = value | 1 << bit_number
的表达式,目的是将指定位设为1。
不明白的是:此表达式运算符优先级|
大于<<
吗,要是这样的话,例如:value
为01011100,bit_number
为3,可是计算之后很多位发生了变化,感觉不太对。那要是<<
优先级大于|
,那么先将bit_number
左移一位,再进行或操作,感觉也是好多为发生了变化。所以,关键点是指定位指的是哪几个位?
先谢谢了。
<<
优先级高于|
,运算之后value
至多只有一位发生变化。
这个表达式的作用是将value
的第bit_number
为置1.
比如:value = 01010100, bit_number = 3
,运算结果就是(01010100 | 1000) = 01011100
<<
的优先级比 |
高.
1 << bit_number
是把 1 左移 bit_number 位, 所以它结果是一个只包含一个 1 的二进制数 (它从右到左数的第 bit_number 位是 1). 比如, 1 << 3
得到的二进制数是 1000.
这样以后再和 value
按位作与运算, 作用应该一目了然了.
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
首先,
<<
的优先级大于|
。其次你的理解有个错误:
<<
右移运算符是把运算法左侧的参数右移右侧参数个位置,也就是说1 << bit_number
不是把bit_number
右移1
位,而是把1
右移bit_number
位。举你的例子,
bit_number
为3
时,1 << bit_number
的结果是00001000
。再与value
的01011100
进行与操作,就能把右数第4
位变成1
了。指定位就是某一位,这里指代的是从右往左数的第
bit_number+1
位