0

我基本上正在处理一个位标志搜索掩码,并且我正在使用向量。这些索引需要达到机器上的最大整数(在 stdint.h 中定义)

基本上问题是

searchMask[ UINTMAX_MAX] = false; // or any value > unsigned int

导致以下警告

warning: C4244: 'argument' : conversion from 'uintmax_t' to 'unsigned int', 
possible loss of data

我考虑过只使用类似 an 的东西unsigned char* = "1110010..."并以这种方式翻转位,但处理 C 字符串总是很痛苦,我怀疑访问 char 数组索引会遇到同样大小的问题?

我可以让vectorgo的索引uintmax_t,或者我应该去 C 字符串路由,还是什么?

4

1 回答 1

3

几乎所有的 STL 容器都将size_t用作它们的大小类型。因此,根据您的系统,size_t可能定义为unsigned int,在您的情况下可能是 32 位整数。这可以解释为什么编译器会抱怨。

UINTMAX_MAX被定义为UINT64_MAX,因此它不适合 32 位整数。尝试使用UINT32_MAX宏,或者独立于平台并使用std::numeric_limits<size_t>::max().

另外,尝试使用std::bitset<N>.

于 2013-02-25T05:02:40.103 回答