0

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

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

每个 char[16] 数组代表 0-127 的值,代表位。我在将“1”输入 15,21 和 23 个单元格时遇到问题。

这是我的程序

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”的问题。

4

2 回答 2

2

使用它来设置正确的位:

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

相关问题:如何设置、清除和切换单个位?

完整代码示例:

#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;
}
于 2012-06-10T19:14:13.397 回答
0

未为 char 定义位域(如果您使用 char,则使用 unsigned..),请使用 unsigned int。或 C99布尔类型。https://stackoverflow.com/a/3971334/1419494

于 2012-06-10T19:38:42.990 回答