问答题 unsigned int i=3;printf("%u/n",i*-1)输出为多少
【正确答案】
【答案解析】运行如下程序:
#include<stdio.h>
int main()
{
unsigned int i=3;
printf("%u/n",i*-1);
return 0;
}
程序输出结果:
4294967293
在32位机器中,i*-1的值为4294967293。在32位机器中,无符号int的值域是[0,4294967295],有符号int的话,值域是[-2147483648,2147483647],两个值域的个数都是4294967296个,即
[0,4294967295]=[0,2147483647]U[2147483648,4294967295]
有符号int的[-2147483648,-1]对应于无符号int的[2147483648,4294967295]区域,两个区域的值是一一映射关系。所以,-1对应4294967295,-2对应4294967294,-3对应4294967293。
引申:unsigned short A=10; printf("~A=%u/n",~A);输出是什么?
因为A为无符号短整型变量,值为10,在32位机器中,转换为二进制为0000 0000 0000 0000 0000 0000 0000 1010,对A取反操作,所以~A的二进制位为1111 1111 1111 1111 1111 1111 1111 0101,十六进制表示即为0xFFFFFFF5,而如果将该数转换为符号整型的话则为-11,因为输出的是无符号整型,无符号整型的范围为0~4294967295,而0xFFFFFFF5转换为无符号十进制整型为4294967285。
所以程序的输出结果为4294967285。