如何正确比较已签名和未签名的整数

时间:2016-08-30 10:28:28

标签: c++

如何比较已签名与未签名? (可能是重复但我找不到合适的答案)

unsigned i = -1
int j = -1
...
if ((int)i != j) j= (int) j

if (int(i) != j) j=int(i)

它有所作为吗?我正在使用前者,但我发现在某些极端情况下,j在我的代码中返回一个非物理大数字。

1 个答案:

答案 0 :(得分:0)

一般来说,它取决于值的范围。

如果有符号值可能小于0,则应将unsigned转换为已签名的值。

另一方面,当unsigned的值可能超过max签名时,您应该将signed转换为unsigned。

如果两者都是真的,你应该使用更大的类型。

另外,风格static_cast<int>(i)看起来更好。

如果您不确定范围,请在手动转换类型之前检查它们或使用boost::numeric_cast

之类的内容