c++ - 位运算符中不明白的地方
伊谢尔伦
伊谢尔伦 2017-04-17 13:34:41
0
5
577

对于形如value = value | 1 << bit_number的表达式,目的是将指定位设为1。

不明白的是:此表达式运算符优先级|大于<<吗,要是这样的话,例如:value为01011100,bit_number为3,可是计算之后很多位发生了变化,感觉不太对。那要是<<优先级大于|,那么先将bit_number左移一位,再进行或操作,感觉也是好多为发生了变化。所以,关键点是指定位指的是哪几个位?

先谢谢了。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

Antworte allen(5)
迷茫

首先,<<的优先级大于|

其次你的理解有个错误:<<右移运算符是把运算法左侧的参数右移右侧参数个位置,也就是说1 << bit_number不是把bit_number右移1位,而是把1右移bit_number位。
举你的例子,bit_number3时,1 << bit_number的结果是00001000。再与value01011100进行与操作,就能把右数第4位变成1了。

指定位就是某一位,这里指代的是从右往左数的第bit_number+1

Ty80

http://jb51.net/article/37282.htm
优先级

阿神

<<优先级高于|,运算之后value至多只有一位发生变化。

这个表达式的作用是将value的第bit_number为置1.

比如:value = 01010100, bit_number = 3,运算结果就是(01010100 | 1000) = 01011100

迷茫

1 << bit_number 是0000 0001(假设为8 bit)左移bit_number位,而不是bit_number左移一位,基本概念不熟悉,先看看基础。。。。

大家讲道理
  1. << 的优先级比 | 高.

  2. 1 << bit_number 是把 1 左移 bit_number 位, 所以它结果是一个只包含一个 1 的二进制数 (它从右到左数的第 bit_number 位是 1). 比如, 1 << 3 得到的二进制数是 1000.

  3. 这样以后再和 value 按位作与运算, 作用应该一目了然了.

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage