无符号的int溢出

时间:2014-02-19 06:10:11

标签: c

我面临一个无符号整数溢流问题 即unsigned int x= < max value * max value > 当我打印x时它给了我-ve值,即使它是无符号整数

我很想知道编译器如何将其作为负面的变种

我如何解决这个问题?

提前谢谢

2 个答案:

答案 0 :(得分:2)

编译器本身并不将其视为有符号值,这几乎可以肯定是因为您使用%d格式字符串来输出它。

使用%u一个用于无符号十进制值,并且您看到它具有“正确”值(就签名而言,在数量上不正确,这将是错误的,因为您已执行了操作导致溢出)。

答案 1 :(得分:0)

你是如何打印的?可能使用printfprintf打印您的未签名的整数,就好像它们已签名一样(至少如果您使用%d)。但这并没有改变这个数字是无符号的,因而是积极的事实。

以下是检查方法:将其与0进行比较,看看会发生什么。因此,请在printf

之后添加
if (x>=0) printf("positive\n");
else printf("negative\n");

看看会发生什么。