无论如何在 C++ 中将 2 维数组煮沸为整数?
Is there anyway to bool 2dimensional array to integer in C++?
猜猜有这样的二维布尔数组,
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解决了,但是不行。
C++没有指定存储方式bool
。编译器可以选择将单个值存储为字节或他们喜欢的任何其他类型,因此没有将 bool
数组转换为整数的无操作方法。
可以使用 std::bitset<16>
的数组来代替更紧凑的表示。它还允许您使用 to_ulong
成员函数获得位的整数表示。
It seems like it is more natural way than calculating using pow function.
如果这种方法对您不起作用,您仍然可以使用位操作来完成,而不是使用 power
函数:
int res = 0;
for (int b = 0 ; b != 16 ; b++) {
if (table[row][b]) {
res |= (1 << b);
}
}
猜猜有这样的二维布尔数组,
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解决了,但是不行。
C++没有指定存储方式bool
。编译器可以选择将单个值存储为字节或他们喜欢的任何其他类型,因此没有将 bool
数组转换为整数的无操作方法。
可以使用 std::bitset<16>
的数组来代替更紧凑的表示。它还允许您使用 to_ulong
成员函数获得位的整数表示。
It seems like it is more natural way than calculating using pow function.
如果这种方法对您不起作用,您仍然可以使用位操作来完成,而不是使用 power
函数:
int res = 0;
for (int b = 0 ; b != 16 ; b++) {
if (table[row][b]) {
res |= (1 << b);
}
}