簡體   English   中英

C Unsigned int提供負值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM