-3

我有个问题。我有一个 32 x 32 整数矩阵的数据集。由于 int 保持 32 位,我想将矩阵的每个元素分解为 32 位,假设我在矩阵的第一位有 255 个十进制数,这可以保持 32 位整数,现在我想将这 255 个十进制数转换为二进制255 即 11111111 并用零填充剩余位置。我不想构造另一个矩阵,因为这样数据大小将大于 32 位。我想用 C++ 做到这一点。像这样的东西...

a[32][32];
for(int i=0;i<32;i++)
for(int j=0;j<32;j++)
a[i][j]=255+i+j;

现在让 a[0][0]=255 以十进制形式...我想将这个和矩阵 a 的每个元素转换为十进制,这将是这样的..a[0][0]=00000000000000000000000011111111。这是 32 位,因为 int 可以容纳 32 位。现在我的问题是如何访问 a[0][0] 的每一位。重要的是我想保持 32 位格式并且不想创建另一个矩阵。

如果您有任何解决方案,请与我分享。我是编程世界的新手。谢谢

4

1 回答 1

1

要访问整数的位,您必须使用按位运算符。

要测试是否设置了第 n 位,请使用&<<

if (m[0][0] & (1 << n))
    cout << "bit " << n << " is set";

请记住从 0 开始计数,以便测试第一个(或最低)位是否设置为使用1 << 0,第二个使用1 << 1等。

要设置第 n 位,请使用|=<<

m[0][0] |= (1 << n);

要清除第 n 位,请使用&=,~<<

m[0][0] &= ~(1 << n);

要反转第 n 位,请使用^=<<

m[0][0] ^= (1 << n);

还有很多其他可能性,包括一次测试或设置多个位、提取位域等。我建议您阅读有关此的教程。互联网上有很多这样的东西,例如这个

于 2013-04-25T06:51:07.980 回答