【问题标题】:Comparing long long with 0比较 long long 与 0
【发布时间】:2015-02-17 00:23:39
【问题描述】:
long long llIdx = foo();
if (llIdx > 0LL) // Can I use 0 here?
  ...

如果我在上面的代码中使用0 而不是0LL 有什么问题吗?

什么时候我应该更喜欢0LL 而不是0

【问题讨论】:

  • long longsigned 类型。写x > 0llx > 0 没有区别,因为0 会自动提升为long long
  • 实际上,long long 的“签名”对于这种特定情况并不重要。如果比较是llIdx >= 0(或0LL),它会,因为对于unsigned long long,谓词总是正确的。

标签: c++ c long-integer


【解决方案1】:

是的,您可以在此处使用普通的0。编译器会查看> 的每个参数的类型并提升较小的那个,以使它们具有相同的大小。

因此llIdx > 0llIdx > 0LL 是等价的。

【讨论】:

  • "编译器会查看> 的每个参数的类型,并提升较小的那个,使它们具有相同的大小。"这就是为什么我没有把我的评论作为答案。如果两个整数的符号不同,就会有很多特殊情况。
  • 在我打字时没有看到您的评论 :) 我只是想用“是”来回答具体问题。而且我认为您的意思是“签名”,而不是“签名”
  • 那么我们什么时候应该使用0LL而不是0
  • @Deqing:我想不出一个很好的例子,如果一个操作数的值为 0,通常的算术转换会做一些意想不到的事情。可变参数是一个(例如printf("%lld", 0LL);)和unsigned n; int i; ... long long l = 0LL + n + i; (如果long long 覆盖unsigned int 的范围,它可能总是这样做,这会阻止将i 提升为unsigned)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多