【发布时间】:2012-04-25 06:56:54
【问题描述】:
如果我需要获取最大值,将 -1 分配给 unsigned int 或其他 unsigned c++ 数据类型是否安全?
在任何情况下它不会给我一个无符号数据类型可以包含的最高值吗?
【问题讨论】:
-
@juergen 这适用于无符号整数,但不适用于所有其他无符号数据类型。
如果我需要获取最大值,将 -1 分配给 unsigned int 或其他 unsigned c++ 数据类型是否安全?
在任何情况下它不会给我一个无符号数据类型可以包含的最高值吗?
【问题讨论】:
为了安全起见,请使用std::numeric_limits<unsigned int>::max()。
将 -1 转换为 unsigned 可以在主流平台上使用,但标准 AFAIR 不保证。
UPD:我会纠正自己的。 (unsigned)-1在C中要求为UINT_MAX,见答案here
【讨论】:
unsigned 类型保证符合标准。问题是意图并不那么清楚。使用std::numeric_limits<unsigned int>::max() 非常清楚。也很冗长,但很清楚。
我认为你可以在任何 2 的补码机器上使用 -1(我认为现在这就是一切)。
【讨论】: