unsigned short A = 10; printf("~A = %u\n",A); char c=128; printf("c=%d\n",c); 输出多少?第一题,A =0xfffffff5,int值 为-11,但输出的是uint.所以输出4294967285 第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 21:26:22
unsigned short A = 10; printf("~A = %u\n",A); char c=128; printf("c=%d\n",c); 输出多少?第一题,A =0xfffffff5,int值 为-11,但输出的是uint.所以输出4294967285 第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值
unsigned short A = 10; printf("~A = %u\n",A); char c=128; printf("c=%d\n",c); 输出多少?
第一题,A =0xfffffff5,int值 为-11,但输出的是uint.所以输出4294967285 第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128.这两道题都是在考察二进制向int或uint转换时的最高位处理.A =0xfffffff5,还有为什么c=0x10,不应该是c=0x08吗,不好意思各位大侠,小弟的分数用完了.
unsigned short A = 10; printf("~A = %u\n",A); char c=128; printf("c=%d\n",c); 输出多少?第一题,A =0xfffffff5,int值 为-11,但输出的是uint.所以输出4294967285 第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值
2^32=4294967296,
A=10,为无符号型,转换为二进制为0000 0000 0000 0000 0000 0000 0000 1010
所以~A的二进制位1111 1111 1111 1111 1111 1111 1111 0101即0xFFFFFFF5,如果转换为符号整型的话则为-11,因为输出的是无符号整型,无符号整型的范围为0~4294967295,而0xFFFFFFF5转换为无符号十进制整型为4294967285
第二题,发生溢出,因为有符号字符型其范围为-128~127
127用二进制表示为:0111 1111,128表示为1000 0000,这里发生溢出,因为第一位为1,为符号位,表示负数,即-128