我面临一个无符号整数溢流问题
即unsigned int x= < max value * max value >
当我打印x时它给了我-ve值,即使它是无符号整数
我很想知道编译器如何将其作为负面的变种
我如何解决这个问题?
提前谢谢
答案 0 :(得分:2)
编译器本身并不将其视为有符号值,这几乎可以肯定是因为您使用%d
格式字符串来输出它。
使用%u
一个用于无符号十进制值,并且您看到它具有“正确”值(就签名而言,在数量上不正确,这将是错误的,因为您已执行了操作导致溢出)。
答案 1 :(得分:0)
你是如何打印的?可能使用printf
。 printf
打印您的未签名的整数,就好像它们已签名一样(至少如果您使用%d)。但这并没有改变这个数字是无符号的,因而是积极的事实。
以下是检查方法:将其与0进行比较,看看会发生什么。因此,请在printf
:
if (x>=0) printf("positive\n");
else printf("negative\n");
看看会发生什么。