将数组中的0和1存储为32位整数并执行位操作

时间:2013-11-29 18:00:54

标签: c++ bit-manipulation

我有一个大小为32的数组。数组中的每个元素都是0或1.我希望能够将它们存储到32位整数的位位置,并对其执行逐位运算。我怎么能这样做?

另外,如果我有两个大小为32的数组,并且我想同时对具有相同索引的元素进行按位操作,我可以这样做吗?

op_and[31:0] = ip_1[31:0] & ip_2 [31:0];

我正在使用gcc编译器。

1 个答案:

答案 0 :(得分:2)

您可以使用或运算符|和比特移位(<<>>)。

uint32_t myInt = 0;
for( int index=0; index < 32; index++ )
{
  myInt |= ( arrayOf32Ints[i] << i );
}

此示例假定arrayOf32Ints的值根据您的问题为0或1。 如果它们可能包含“任何真实”或错误值,则应明确要求(有些人会告诉您使用!!但标准并不保证true为1)。

该行将是

myInt |= ( (arrayOf32Ints[i])?1:0) << i );

如果要打开或关闭各个位,可以执行以下操作:

myInt |= (1<<3); //Sets bit 3 true by shifting 1 3 bits up (1 becomes 4), and ANDing it with myInt.
myInt |= 4; // Sets bit 3 by ANDing 4 (The binary form of 4 is 100) with myInt.
myInt ^= (1<<5);; // Turns OFF bit 5 by XORing it with myInt (XOR basically means "Any bits which are not the same in both numbers")
myInt ^= 16; //Sets bit 5 by XORing it with myInt (16 is 10000 in binary)