【发布时间】:2016-03-10 09:22:09
【问题描述】:
我的目标是有一个无符号整数值的升序排序列表,我使用sub_func 来选择哪个更大。
sub_func 返回是int,因为我想比较所有数字中哪个更大,但我在定义 unsigned int 的最大值时遇到了问题,即 (0xffffffff == -1) .我想在这里了解更多关于无符号数字的信息。我该如何解决这个问题?
我有以下代码:
#define p_max (0xffffffff)
uint32 a = p_max;
uint32 b = 20;
int sub_func(uint32 a, uint32 b)
{
return (b - a);
}
rerun 是 21,我希望它是 20 - MAX,这将是负数,我的返回类型是负数。
但是,我看到它总是一个正数。我不想要,如何解决这个问题?
【问题讨论】:
-
当
a < b和false时,为什么不采用返回true的标准方式?想想a = b = max的情况,你需要一个更广泛的签名类型,例如C++11 的long long至少为 64 位。 -
我想要返回值,它对我进一步的编码很重要。
-
unsigned值不能为负数。 -
嗯,当这两个值之间的差异大于
0x7fffffff时,你的计划是什么? -
您确定需要签名差异吗? +/- 或 +1/0/-1 还不够吗?