2014-02-19 144 views
-5

我面對過流問題的無符號整數 即unsigned int x= < max value * max value > 當我打印X這是給我的,即使它是無符號整數無符號整型溢出

的-ve值我渴望瞭解如何編譯正在作爲負價格

我該如何解決這個問題?

感謝您提前

+4

**其中**是[您的最小示例?](http://stackoverflow.com/help/mcve) –

+1

這可能是因爲您將其打印爲有符號整數。這就是爲什麼我們需要一個最小的例子 - 錯誤可能不是你認爲它的地方。 – GVH

+1

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。如果我們不必猜測你寫的是什麼代碼,它就會有很大的幫助。請參閱如何創建MCTRE [如何創建最小,完整,測試和可讀示例](http://stackoverflow.com/help/mcve)。因爲我必須猜測,我希望你使用'printf(「u =%d \ n」,u);'而不是正確的'printf(「u =%u \ n」,u);'必須是一個猜測,因爲你根本沒有給我們很多信息。 –

回答

0

你是如何打印它?可能使用printfprintf打印您的未簽名的整數,就好像它們已經簽名一樣(至少如果您使用%d)。但是這並沒有改變這個數字是無符號的,因此是正數。

下面介紹如何檢查它:將其與0進行比較,看看會發生什麼。因此,請在printf之後加上:

if (x>=0) printf("positive\n"); 
else printf("negative\n"); 

並且看看會發生什麼。

+0

讓我告訴你這個場景,我有一個設備,我運行了10天以上,並且我有一個無符號整數的計數器,它計算即將到來的字節數,但是在十天之後,我看到一些消極的,我知道它會越來越溢出,但即使它溢出了,它也應該打印負數 – Rajiv

+0

@Rajiv - 如果你能讀到我的答案,你會發現打印寫入的是負面的,即使它是正面的,因爲印刷品認爲它是有簽名的即使它沒有簽名。所以它打印負面,但實際上它是積極的。原因是你使用'printf(「%d」)'打印。嘗試改用'printf(「%u」)'來知道它是無符號的。 – rabensky

2

編譯器本身並不把它當作一個有符號值,這幾乎肯定是因爲你使用%d格式字符串來輸出它。

使用%u一個用於無符號十進制值,並且您看到它具有「正確」值(就符號而言是正確的,而不是幅度正確,這會因爲執行導致溢出的操作而出錯)。