[英]type promotion from adding int and unsigned int in C
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
unsigned int k;
k = 2;
i = -1;
if (k+i > 1 ) /* if i write ( (k+i) > 1) i get the same result */
{
printf("i converted to unsigned \n");
}
else
{
printf("i remains negative\n i: %d \n ", i );
}
return 0;
}
根据integer的宣传,output应该是一个很高的数字。 我很困惑,这是我缺少的东西吗? 此处的 output 为 1,但在以下行中: if((k+i) > 1) "i" 应转换为无符号。 我搜索了很多,但似乎其他人得到了不同的结果,我确定我使用的是 c。(可视代码)
溢出:
-1 = 0xFFFFFFFF base 2: 1111 1111 1111 1111 1111 1111 1111 1111
2 = 0x00000002 base 2: 0000 0000 0000 0000 0000 0000 0000 0010
+ --------------- + --------------------------------------------------
0x00000001 0000 0000 0000 0000 0000 0000 0000 0001
结果左侧溢出 1。
“……output应该是一个很高的数字……”
使用"%x"
格式说明符,您可以看到您的假设是正确的,如果未签名,它将很大:
printf("i remains negative\n i: 0x%X \nj: %ld ", i , j);// j is inited to 0 here
结果是
i: 0xFFFFFFFF
(十进制为4294967295
但使用"%d"
,结果为-1
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.