将带符号的char转换为C中的unsigned int

时间:2014-02-22 01:27:08

标签: c casting type-conversion signed

有人可以向我解释为什么以下代码输出-50,即使它被转换为unsigned int吗?

int main()
{
  signed char byte = -50;
  unsigned int n;

  n = (unsigned int) byte;

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

输出:-50

4 个答案:

答案 0 :(得分:5)

演员表是正确的,但您打印错误。 %d中的printf()用于int,请将其更改为:

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

答案 1 :(得分:4)

-50分配给unsigned int会导致整数回绕,并且unsigned int包含的内容与signed int对应的-50具有相同的位在几乎所有计算机都使用的二进制补码表示中。

现在,printf是一个函数,它根据格式字符串解释可变数量的参数。格式%d适用于签名 int,而printf无法知道相应的参数实际上是unsigned int(因为你告诉了)否则)。因此,这些位被解释为signed int并且得到-50

答案 2 :(得分:1)

发表声明:

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

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

如果你尝试

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

你会发现你不会得到 -50

答案 3 :(得分:0)

即使使用printf("n: %u", n);,您也不会获得50

查看链接 int to unsigned int conversion