【问题标题】:why the output in negative (using bitwise-not)为什么输出为负(使用按位非)
【发布时间】:2014-03-07 17:25:10
【问题描述】:
void main()
{
        unsigned int a = 10;
        a = ~a;
        printf("%d\n", a);
}

输出是-11

10 = 1010

~10 = 0101

为什么输出是负数?

【问题讨论】:

  • 使用printf("%u\n", a);再试一次。
  • @timrau 现在的输出是 4294967285
  • 试试“%x”,比十进制更明显。
  • int 的大小必须 >= 16 位,字符 >= 8 位。 C 中没有 4 位数据类型

标签: c bit-manipulation bitwise-operators


【解决方案1】:

使用 %x 查看一致的十六进制结果。

#include <stdio.h>
void main()
{
        unsigned int a = 10;
        printf("%x\n", a);

        a = ~a;
        printf("%x\n", a);
        return 0;
}

输出:

a
fffffff5

【讨论】:

    【解决方案2】:

    ~1010 的结果不是0101 而是11111111111111111111111111110101。该值的所有 32 位都被反转,不仅是最高设置位之前的位。

    由于结果中设置了第 32 位,因此为负数。

    【讨论】:

      【解决方案3】:

      %d 用于有符号十进制整数。使用%u 打印一个无符号十进制整数。

      【讨论】:

        【解决方案4】:

        使用 %u 而不是 %d,因为 printf 根据 %d 或 %u 处理您的变量。你为

        【讨论】:

          猜你喜欢
          • 2017-08-27
          • 2012-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-22
          • 2011-06-18
          相关资源
          最近更新 更多