无论如何在C ++中将2维数组bool到整数?

时间:2017-09-16 13:47:56

标签: c++ arrays boolean typecast-operator

猜猜有这样的二维bool数组,

bool table[16][16] 

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1  ...16[0][] ->1
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0  ...16[1][] ->2 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1  ...16[2][] ->3
    0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1  ...16[3][] ->5
    0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1  ...16[4][] ->9
    ...
    0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1  ...16[15][] ->41

我知道所有的bool值都是在顺序地址中对齐的。 我可以使用某些类型转换函数将这些数组转换为int值而不使用任何算术函数吗?看起来它比使用pow函数计算更自然。

我用reinterpret_cast来解决它,但它没有用。

1 个答案:

答案 0 :(得分:1)

C ++没有指定存储bool的方式。编译器可以选择将单个值存储为字节或他们喜欢的任何其他类型,因此没有无操作方法将bool数组转换为整数。

可以使用std::bitset<16>数组代替更紧凑的表示。它还允许您使用to_ulong成员函数来获取位的整数表示。

  

似乎比使用pow函数计算更自然。

如果这种方法不适合您,您仍然可以使用位操作,而不是使用power函数:

int res = 0;
for (int b = 0 ; b != 16 ; b++) {
    if (table[row][b]) {
        res |= (1 << b);
    }
}