2009-12-12 75 views
1

即時嘗試輸入一個大於32767的五位數字,我在聲明int數時使用「unsigned」,當im試圖打印相同的數字時,它打印一些任意的負數, 結果溢出.. .... 請求幫助我更大的整數寬度

+3

顯示導致問題的一些實際代碼。 – Isaac 2009-12-12 04:28:31

+0

你有沒有嘗試提供更大的褲子整數? – Sneakyness 2009-12-12 04:31:01

+0

使用正確的格式說明符。在print()中使用不正確的格式說明符可能會導致UB。 – 2009-12-12 04:31:02

回答

0

直到你展示了一些代碼,我不能確定任何東西。

但是AFAIK如果你打印出一個uint,你應該不能打印出一個負數 - 即使溢出了,整數總是保持一個正數,就C而言。

所以還有其他的錯誤。

1

沒有看到您的代碼,我猜你正在使用%d或%i在printf語句中。改爲使用%u。

1

使用「%u」而不是「%d」打印無符號值。

0

使用正確的格式說明符。

%d對於int
%u爲unsigned int。

在printf()中使用不正確的格式說明符可能會導致未定義的行爲

例如,以下代碼調用未定義的行爲(UB)

#include<stdio.h> 
int main(void) 
{ 
    unsigned int z=Some_value; /*Some_value is an unsigned int */ 
    printf("%d",z); 
    /*UB as format specifier for unsigned int is incorrect,it should be %u not %d*/ 
} 
0

我猜你的機器/編譯器的int是16位。

雖然我不知道你的平臺是什麼,但我想long可以解決你的問題(在我所知的所有平臺上它都是32位或更多)。用%ld代替%d打印。

不要試圖使用無符號和%u,因爲它們只會給你數字高達65536,我想你想要更多。