int bit =(weight [i]&s)是什么意思

时间:2020-02-06 18:39:00

标签: c++

这是我的第一个问题,所以我要求了解。下面是将十进制数转换为二进制的函数。我不明白这里发生了什么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';
    }
}

3 个答案:

答案 0 :(得分:1)

int位=(weight [i]&s)是什么意思

T name = expression;

是变量声明的语法。该变量是从表达式初始化的副本。

int bit = expression;

这将声明类型为bit的变量int

array[index]

这是数组下标运算符。结果将是给定索引处数组元素的值。

left & right

这是按位与运算。当且仅当两个操作数中相同位置的位均为1时,结果的每一位才为1。

int bit = (weight[i] & s)

这结合了以上所有内容。括号可用于更改操作顺序,但是在这种情况下,它们是多余的。

答案 1 :(得分:0)

此声明

unsigned char weight[8] = { 1,2,4,8,16,32,64,128 };

设置用于按位与运算的掩码。您可以像这样重写它

unsigned char weight[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };

这个按位AND表达式

weight[i] & s;

检查对象s中的对应位是否设置为1。

例如,如果s的值为'\x65' then these operations with the masks

'\x65' & 0x01
'\x65' & 0x04
'\x65' & 0x20
'\x65' & 0x40

将产生不等于0的结果。

请注意,您的代码中有错字

for (int = 7; i >= 0; i--)

应该在

for (int i = 7; i >= 0; i--)

这是一个演示程序

#include <iostream>
#include <iomanip>

void showbits( unsigned char c )
{
    unsigned char weight[8] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };

    for ( int i = 7; i >= 0; i-- )
    {
        std::cout << ( ( weight[i] & c ) ? '1' : '0'  );
    }

    std::cout << '\n';
}

int main() 
{
    char c = 'e';

    std::cout << "\'" << c << "\' - " << std::hex << static_cast<int>( c ) << '\n';

    showbits( c );
    return 0;
}

如果系统支持ASCII编码,则输出为

'e' - 65
01100101

答案 2 :(得分:0)

在C语言中,&运算符可以具有两种含义:

  1. address of运算符(用作一元运算符时)
  2. bitwise AND运算符(用作二进制运算符时)

另外,在C ++中(但在C语言中不是),在声明变量时使用它可能意味着声明的变量是引用。

在您描述问题的情况下,&运算符是按位AND运算符。

为了了解发生了什么,我将用二进制表示形式写weight数组的所有值:

00000001 (1)
00000010 (2)
00000100 (4)
00001000 (8)
00010000 (16)
00100000 (32)
01000000 (64)
10000000 (128)

通过对功能参数s与上面列出的值一起执行按位AND运算,将在每次循环迭代中从变量s中提取某个位。在循环的第一次迭代中,将提取并打印最低有效(即最低)位,在循环的第二次迭代中,将提取下一个比特,依此类推。

相关问题