【发布时间】:2010-03-20 15:33:42
【问题描述】:
我有以下情况(unix):
x is a long and has value 300
y is a long and has value 50000
if (x <= y) printf("Correct.");
if (x > y) printf("Ouch.");
现在我总是得到“哎哟”。这意味着程序一直告诉我 300 大于 50000!
只有当我这样做时它才会再次起作用
if ((int)x <=(int) y) printf("Correct.");
if ((int)x > (int)y) printf("Ouch.");
那么比较运算符有什么问题呢?
【问题讨论】:
-
x 和 y 是如何声明和赋值的?
-
还有 printf("%ld %ld", x, y) 这样你就可以看到值了。
-
很可能你这里的“long”只是一个2字节的值,因此溢出并出现负数; sizeof(long) 是平台相关的,所以你不能假设它是你所期望的,特别是如果你的目标是嵌入式平台或类似的平台。
-
从片段中,我们必须相信您所说的 x 和 y 是您所说的类型和值,并且不存在可能损坏或修改这些值的其他代码。奥卡姆剃刀建议至少有一个假设是不正确的。这就是您的调试器的用途。
-
@Charles Duffy:但如果他将值转换为 int,为什么它会起作用?除非 int 是 8 位? @Kyle,您可以对变量执行 sizeof() 以查看每个变量中有多少位。这是在什么平台上的?正如@freespace 所问,x 和 y 是如何声明和分配的?
标签: c comparison integer