在 C 中将有符号的字符转换为无符号的 int



谁能向我解释为什么以下代码输出 -50,即使它被强制转换为无符号的 int?

int main()
{
  signed char byte = -50;
  unsigned int n;
  n = (unsigned int) byte;
  printf("n: %d", n);
}

输出: -50

-50分配给unsigned int会导致整数环绕,并且这种环绕unsigned int具有与几乎每台计算机使用的二进制补码表示中对应于-50signed int相同的位。

现在,printf是一个具有可变参数数量的函数,它根据格式字符串进行解释。%d的格式是用于有符号intprintf无法知道相应的参数实际上是unsigned int(因为你另有说明)。所以这些位被解释为好像它是signed int的,你会得到-50.

强制转换正确,但打印不正确。 %d printf() 表示int,请将其更改为:

printf("n: %u", n);

即使有printf("n: %u", n);,你也不会得到50

查看链接int to unsigned int conversion

用你的陈述:

printf("n: %d", n); 

您将其转换为"有符号十进制整数"

如果你尝试

std::cout<<n<<std::endl;

你会看到你不会得到-50

相关内容

  • 没有找到相关文章

最新更新