我面对过流问题的无符号整数 即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);'必须是一个猜测,因为你根本没有给我们很多信息。 –