C如何将位掩码为char数组

时间:2012-06-10 18:46:24

标签: c mask bitmask

我有一个char [16]数组,我从用户那里得到输入: 输入例如-15,21,23,-1

我需要为位置15,21和23将位值设置为“1”。 -1将完成该程序。

每个char [16]数组表示0-127的值,表示位。 我有问题在15,21和23个单元格中输入'1'。

这是我的程序

int temp;
char A[16];
/*Sets all the cells values to o*/
memset(A, 0, 16*sizeof(char));
While (int != -1)
{
    scanf("Enter values from the user:%d", val");
    div = (temp/8);
    mod = (temp%8);
    A[div] |= (mod<<=1);
}

它没有将单元格15,21和23值设置为“1”的问题。

2 个答案:

答案 0 :(得分:2)

使用此项设置正确的位:

A[div] |= (1<<mod);

相关问题:How do you set, clear, and toggle a single bit?

完整代码示例:

#include <iostream>

int main() {
    unsigned char A[16];
    memset(A, 0, sizeof(A));
    int t;
    std::cin >> t;
    while (t != -1)
    {
        int div = (t/8);
        int mod = (t%8);
        A[div] |= (1<<mod);
        std::cin >> t;
    }
    for(int i = 0; i < 16; ++i) {
        std::cout << (int)A[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

答案 1 :(得分:0)

没有为char定义位字段(如果你使用char使用unsigned ..),请使用unsigned int。或C99 boolean类型。 https://stackoverflow.com/a/3971334/1419494