2014-02-19 175 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一个用于无符号十进制值,并且您看到它具有“正确”值(就符号而言是正确的,而不是幅度正确,这会因为执行导致溢出的操作而出错)。