代码之家  ›  专栏  ›  技术社区  ›  user366312

为什么这个C程序输出一个负数?

  •  6
  • user366312  · 技术社区  · 15 年前

    我在无符号变量中分配了补码值。

    那么为什么这个C程序输出一个负数呢?

    #include<stdio.h>
    #include<conio.h>
    
    int main()
    {
        unsigned int Value = 4;         /*   4 = 0000 0000  0000 0100 */  
        unsigned int result = 0;
    
        result = ~ Value;               /* -5 = 1111 1111  1111 1011 */  
    
        printf("result = %d", result);  /* -5             */
    
        getch();
    
        return 0;
    }
    
    2 回复  |  直到 15 年前
        1
  •  14
  •   Marcelo Cantos    15 年前

    这个 %d 格式说明符指示 printf 将参数视为有符号整数。使用 %u 相反。

        2
  •  4
  •   Adam Ruth    15 年前

    这是因为%d是带符号的int格式占位符,所以它正在被转换。使用%u表示无符号。