我有一个问题。我有一个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位格式,不想创建另一个矩阵。
如果您有任何解决方案,请与我分享。我是编程世界的新手。感谢
答案 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。