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

Kyl*_*ing 5 c signed casting type-conversion

任何人都可以向我解释为什么下面的代码输出-50即使它被转换为unsigned int?

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

  n = (unsigned int) byte;

  printf("n: %d", n);
}
Run Code Online (Sandbox Code Playgroud)

输出:-50

Ark*_*kku 6

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

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


Yu *_*Hao 5

演员是正确的,但你打印错误.%din printf()for for int,将其更改为:

printf("n: %u", n);
Run Code Online (Sandbox Code Playgroud)