等价于位运算的数学方程 我正在阅读的一段C++代码是 int x = 10; int r = 5; auto bb = x << (r & 0x1); intx=10; int r=5; auto bb=x

等价于位运算的数学方程 我正在阅读的一段C++代码是 int x = 10; int r = 5; auto bb = x << (r & 0x1); intx=10; int r=5; auto bb=x,c++,bit-manipulation,C++,Bit Manipulation,r&0x1是介于r和1之间的按位AND。这本质上等同于检查r是偶数还是奇数 如果r为奇数,则语句执行1位移位;如果r为偶数,则语句不执行任何操作(0位移位)。将整数左移n相当于将其乘以2^n。因此,在这种情况下,如果r为奇数,则将x加倍。&是按位and运算符 r&0x1如果设置了最后一位(即,如果r为奇数),则结果为1;如果未设置最后一位(r为偶数),则结果为0 左移n对应于2^n的乘法 当r=5为奇数时,将执行1的左移,结果为10*(2^1)=20此方程执行以下操作: (r&0x1)检查r的奇

r&0x1
是介于
r
1
之间的按位AND。这本质上等同于检查
r
是偶数还是奇数


如果
r
为奇数,则语句执行
1
位移位;如果
r
为偶数,则语句不执行任何操作(0位移位)。将整数左移
n
相当于将其乘以
2^n
。因此,在这种情况下,如果
r
为奇数,则将
x
加倍。

&是按位and运算符

r&0x1
如果设置了最后一位(即,如果r为奇数),则结果为1;如果未设置最后一位(r为偶数),则结果为0

左移n对应于2^n的乘法


当r=5为奇数时,将执行1的左移,结果为10*(2^1)=20

此方程执行以下操作:

(r&0x1)检查r的奇异性,例如:

 r = 5 -> 00000101 in bits
 0x1   -> 00000001 in bits

 r & 0x1->00000001 since its only 1 if both bits are one.
所以,如果r是奇数,这项结果为1,如果r是偶数,则为0

现在我们向左移动这个值(1或0)


n
auto bb=x非常简单的答案!随着jonas_toth的深入解释,我现在理解了位运算@Kyle,很高兴我能帮助您更好地理解位运算。&称为
位and
。详细计算:
x=0b1010;r=0b0101
。现在
r&0x1=0b0101&0b0001=1
然后
x ps.
x
 n << 0/1 

 n = 10:   00001010
 n << 1    00010100
auto bb = x << (r & 0x1);