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
分配-50给unsigned int导致整数回绕,并且这个回绕unsigned int具有与signed int对应的相同的位设置-50几乎每台计算机都使用的二进制补码表示中。
现在,printf是一个具有可变数量参数的函数,它根据格式字符串进行解释。该格式%d用于已签名的 ints 并且printf无法知道相应的参数实际上是一个unsigned int(因为您另有说明)。所以这些位被解释为好像它是signed int,你得到-50.
演员是正确的,但你打印错误.%din printf()for for int,将其更改为:
printf("n: %u", n);
Run Code Online (Sandbox Code Playgroud)