繁体   English   中英

通过在 C 中添加 int 和 unsigned int 进行类型提升

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM