2015-11-14 31 views
0

,碰到下面的很多定義。如果ULL長簽名很長,爲什麼它的值爲負值-11?宏下面的價值是什麼?在探索linux代碼時遇到了無符號long long和負值

#define BTRFS_FREE_SPACE_OBJECTID -11ULL 
+1

'長long'不具有標準數量的比特。通過使用負面的符號,您可以在鍵入時獲得@Barmar剛剛評論的內容。 –

回答

3

-11ULL與 - (11ULL)相同。 11ULL是一個無符號long long,值爲11.如果您瞭解了無符號類型的算術運算是如何工作的,如果數學結果不符合該範圍,則重複添加或減去最大值+1。

數學結果-11不適合,所以最大的無符號長long + 1被添加,並且-11ULL給出比最大可能的無符號長long值小10的值。一個巨大的正數,而不是負數。

+0

謝謝,現在理解它好一點:) – wewmi

1
unsigned int a=-1; 

相同:

unsigned int a=0xffffffff;