【问题标题】:C: Comparing two long integers (very strange)C:比较两个长整数(很奇怪)
【发布时间】: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


【解决方案1】:

我发现了错误。它使用的是 sscanf(...%d) 而不是 sscanf(...%ld)。 :( 感谢@Zan Lynx 的提示,感谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2017-10-23
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2017-03-19
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多