[英]C Unsigned int providing a negative value?
我有一個無符號整數,但是當我使用%d打印出來時,有時會出現負值嗎?
打印%d
將讀取整數作為帶符號的十進制數,而不管其定義的類型如何。
要打印無符號數字,請使用%u
。
這是因為C處理變量參數的方式。 編譯器只是從堆棧中提取值(鍵入為void*
並指向調用堆棧), printf
必須從您給它的格式字符串中找出數據包含的內容。
這就是您需要提供格式字符串的原因 - C無法使用RTTI或“基類”(例如Java中的Object
)來獲取通用或預定義的toString
。
這應該工作:
unsigned int a;
printf("%u\n", a);
說明:在大多數體系結構中,有符號整數用二進制表示。 在這個系統中,無論是使用int
還是unsigned int
,小於2**(N-1)
(其中N = sizeof(int)
)的正數都以相同的方式表示。 但是,如果unsigned int中的數字大於2**(N-1)
,則表示在二進制補碼下的負數有符號數 - 這是printf
在您傳遞"%d"
。
%d表示printf將該值解釋為int(已簽名)。 如果它是unsigned int,請使用%u。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.