等价于位运算的数学方程 我正在阅读的一段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)
nauto 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);