无符号长多头,负值

时间:2015-11-14 19:57:42

标签: c types

在探索linux代码时,遇到了如下的许多定义。如果ULL长期无符号,为什么它具有负值-11?下面宏的价值是什么?

#define BTRFS_FREE_SPACE_OBJECTID -11ULL

2 个答案:

答案 0 :(得分:3)

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

数学结果-11不合适,因此添加了最大的无符号长long + 1,-11ULL比最大可能的无符号long long值小10。一个巨大的正数,而不是负数。

答案 1 :(得分:1)

 unsigned int a=-1;

与:

相同
 unsigned int a=0xffffffff;