使用相同的数据集将一个字节转换为8位

时间:2013-04-24 05:09:10

标签: c++

我有一个问题。我有一个32乘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;

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

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

1 个答案:

答案 0 :(得分: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);

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