我面對過流問題的無符號整數 即unsigned int x= < max value * max value >
當我打印X這是給我的,即使它是無符號整數無符號整型溢出
的-ve值我渴望瞭解如何編譯正在作爲負價格
我該如何解決這個問題?
感謝您提前
我面對過流問題的無符號整數 即unsigned int x= < max value * max value >
當我打印X這是給我的,即使它是無符號整數無符號整型溢出
的-ve值我渴望瞭解如何編譯正在作爲負價格
我該如何解決這個問題?
感謝您提前
你是如何打印它?可能使用printf
。 printf
打印您的未簽名的整數,就好像它們已經簽名一樣(至少如果您使用%d)。但是這並沒有改變這個數字是無符號的,因此是正數。
下面介紹如何檢查它:將其與0進行比較,看看會發生什麼。因此,請在printf
之後加上:
if (x>=0) printf("positive\n");
else printf("negative\n");
並且看看會發生什麼。
編譯器本身並不把它當作一個有符號值,這幾乎肯定是因爲你使用%d
格式字符串來輸出它。
使用%u
一個用於無符號十進制值,並且您看到它具有「正確」值(就符號而言是正確的,而不是幅度正確,這會因爲執行導致溢出的操作而出錯)。
**其中**是[您的最小示例?](http://stackoverflow.com/help/mcve) –
這可能是因爲您將其打印爲有符號整數。這就是爲什麼我們需要一個最小的例子 - 錯誤可能不是你認爲它的地方。 – GVH
歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。如果我們不必猜測你寫的是什麼代碼,它就會有很大的幫助。請參閱如何創建MCTRE [如何創建最小,完整,測試和可讀示例](http://stackoverflow.com/help/mcve)。因爲我必須猜測,我希望你使用'printf(「u =%d \ n」,u);'而不是正確的'printf(「u =%u \ n」,u);'必須是一個猜測,因爲你根本沒有給我們很多信息。 –