猜猜有这样的二维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来解决它,但它没有用。
答案 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);
}
}