【问题标题】:Unsigned long long with negative valueUnsigned long long 带负值
【发布时间】:2015-11-15 04:15:17
【问题描述】:

在探索 linux 代码时,遇到了许多如下定义。如果 ULL 是 unsigned long long,为什么它有负值 -11?下面的宏是什么值?

#define BTRFS_FREE_SPACE_OBJECTID -11ULL

【问题讨论】:

  • long long 没有标准位数。通过使用否定符号,您会得到@Barmar 在我输入时刚刚在下面评论的内容。

标签: c types


【解决方案1】:

-11ULL 与 - (11ULL) 相同。 11ULL 是一个值为 11 的 unsigned long long。如果您阅读无符号类型的算术运算是如何工作的,如果数学结果不适合该范围,则最大值 + 1 会被重复添加或减去。

数学结果 -11 不适合,因此添加了最大的 unsigned long long + 1,并且 -11ULL 给出的结果比可能的最大 unsigned long long 值少 10。一个巨大的正数,而不是负数。

【讨论】:

    【解决方案2】:
     unsigned int a=-1;
    

    等同于:

     unsigned int a=0xffffffff;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多