2009-12-12 76 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,我想你想要更多。