下面是如下所示的问题,答案是真的。我知道当你比较签名和未签名时会有一些促销。你能告诉我签名价值是如何升级的吗?
main()
{
signed int a = -5;
unsigned int b = 2147483648;
if(a > b)
printf("True\n");
else
printf("False\n");
}
高级谢谢 麦迪
答案 0 :(得分:3)
尝试打印转换后的值,看看发生了什么:
int main(int argc, char **argv)
{
signed int a = -5;
unsigned int ua = a;
unsigned int b = 2147483648;
printf("a=%d ua=%u b=%u\n", a, ua, b);
if(a > b)
printf("True\n");
else
printf("False\n");
}
打印
a=-5 ua=4294967291 b=2147483648
True
分享并享受。
答案 1 :(得分:1)
如您所知,有符号数的MSB被视为符号位,如果是无符号数,则会将其添加到该数字的值。对于负数,例如-5
,二进制值为11111111111111111111111111111011
,其中MSB为符号位,其余位为2的补码为5(对于-5)。当这被转换为无符号数时,所有位都被认为是找到数字的值,包括MSB等等,它的值变为4294967291
。