这是我的第一个问题,所以我想了解。下面是将十进制数转换为二进制的函数。我不明白这里发生了什么int bit = (weight[i] & s)
:
void showbits(unsigned char s)
{
unsigned char weight[8] = { 1,2,4,8,16,32,64,128 };
for (int = 7; i >= 0; i--)
{
int bit = (weight[i] & s);
if (bit != 0)
cout << '1';
else cout << '0';
}
}
在C中,&
运算符可以具有两个含义:
另外,在C ++中(但在C中不是),在声明变量时使用它可能意味着声明的变量是引用。
在您描述问题的情况下,&
运算符是按位AND运算符。
为了了解发生了什么,我将以weight
二进制表示形式写入数组的所有值:
00000001 (1)
00000010 (2)
00000100 (4)
00001000 (8)
00010000 (16)
00100000 (32)
01000000 (64)
10000000 (128)
通过对函数参数s
和上面列出的值执行按位与运算,将s
在每次循环迭代中从变量中提取特定的位。在循环的第一次迭代中,将提取并打印最低有效(即最低)位,在循环的第二次迭代中,将提取下一个比特,依此类推。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句