提前感谢您提出这个基本问题。
我正在阅读一个教程,我看到了这一行。
int a = (n & 8) / 8
这应该用于识别右边的第四位是否是0或1的二进制表示。我理解位等的概念,但我不明白这代表什么数学方程(如果有的话)。
有人会关心如何用数学方程式写出来吗?另外,如果我在理解这条线路时遗漏了其他任何内容,请告诉我。谢谢。
答案 0 :(得分:3)
表达式(n& 8) 是逻辑和n与1000二进制。
所以从右边获得第4位。
然后将其除以8,将值右移3个二进制位。即它将第4位移到最右边。
更清楚地表达为" >> 3"
所以你的整体表达方式如下:
(n AND 1000 ) >> 3
这将N的第4位留在临时变量中,作为位0(最右边的位)。 由于AND,所有其他位将为零。
答案 1 :(得分:2)
8
是二进制中的1000
所以如果您使用任何数字bitwise AND
n & 8
仅当第4位为8
且
1
如果再将它除以8,它将返回1,否则为零
例如
代表9
(1001
)
9 & 8
将是
1001
& 1000
------
1000
现在针对第四位为0
代表7
(0111
)
7 & 8
将是
0111
& 1000
-----
0000
答案 2 :(得分:1)
int a = (n & 8) / 8;
n & 8
将AND
掩码应用于n
的第4位;
n: 11001010 // example value
8: 00001000
result: 00001000
将该数字除以8会将结果置于最低位:
result: 00000001
将数字除以2^n
会将数字n
位向右移动(与乘以2^n
向左移位的方式相同)。
结果分配给变量a
,现在包含0或1,具体取决于第4位的值。
答案 3 :(得分:0)
按位运算符处理位并执行逐位运算。假设 a = 60
;和b = 13
;现在采用二进制格式,它们如下:
a = 0011 1100
b = 0000 1101
a&b=0000 1100
然后 a& b 也是整数,在您的示例中进一步除以8。