如何比较已签名与未签名? (可能是重复但我找不到合适的答案)
unsigned i = -1
int j = -1
...
if ((int)i != j) j= (int) j
或
if (int(i) != j) j=int(i)
它有所作为吗?我正在使用前者,但我发现在某些极端情况下,j在我的代码中返回一个非物理大数字。
答案 0 :(得分:0)
一般来说,它取决于值的范围。
如果有符号值可能小于0,则应将unsigned转换为已签名的值。
另一方面,当unsigned的值可能超过max签名时,您应该将signed转换为unsigned。
如果两者都是真的,你应该使用更大的类型。
另外,风格static_cast<int>(i)
看起来更好。
如果您不确定范围,请在手动转换类型之前检查它们或使用boost::numeric_cast