c语言数据存储加深练习-创新互联
                                            原码反码补码详解

整型提升详解
菜单- 例题1:
- 例题2:
- 例题3:
- 例1 解析:
- 例2解析:
- 例3解析:
 
 
//输出什么?
#includeint main()
{char a= -1;
  signed char b=-1;
  unsigned char c=-1;
  printf("a=%d,b=%d,c=%d",a,b,c);
  return 0;
} //输出什么
#includeint main()
{char a = -128;
  printf("%u\n",a);
  return 0;
} #incluudeintmain()
{int i= -20;
unsigned  int  j = 10;
printf("%d\n", i+j);
} #includeint main()
{char a = -1;//赋值运算是从右往左算,所以先写出-1的原码,在转换成补码,在发生截断,最终才存储到a当中。
	//10000000000000000000000000000001    -1的原码
	//11111111111111111111111111111110    -1的反码
	//11111111111111111111111111111111    -1的补码
	//11111111   最终char是一个字节,只能存储8个比特位,所以要发生截断,最终a的二进制如前面    
	signed char b = -1;	
	//11111111     b的最终二进制
	unsigned char c = -1;
	//0000000000000000000000000000001
	//1111111111111111111111111111110   注意:无符号数按位取反时,直接0变 1,1变0.即可,因为所有位都是数据位
	//1111111111111111111111111111111
	//11111111  c的最终二进制
	//注意,a,b,c虽然最终的二进制是一样的,但最高位的1意义不一样,a,b的最高位为符号位,c是数据位
	printf("a=%d,b=%d,c=%d", a, b, c);//%d是以有符号的整型的原码打印(它会看你整型提升后的最高位,并把它当做符号位,并且要进行原码反码补码的转换。),上述的所有char类型全部要发生整型提升
	//11111111 a的二进制
	//11111111111111111111111111111111  a整型提升后的补码
	//11111111111111111111111111111110  a的反码
	//10000000000000000000000000000001  a的原码
	//b也是这样做
	//c的二进制 11111111
	//00000000000000000000000011111111 c整型提升后的补码
    //c整型提升后最高位为0,是正数,原码反码补码相同。
	return 0;
}// 运行结果a=-1,b=-1,c=255 #includeint main()
{char a = -128;
  //10000000000000000000000010000000 -128的原码
  //11111111111111111111111101111111 -128的反码
  //11111111111111111111111110000000 -128的补码
  //10000000  a的二进制
  printf("%u\n",a);//%u是打印无符号十进制数
  //1111111111111111111111111000000 整型提升后a的二进制序列,(补码)
  //以%u形式打印,它会认为补码最高位的1为数据位(直接当正数处理),所以a是正数,原码反码补码相同
  return 0;
}//运行结果a=4294967168 #includeint main()
{int i = -20;
	//10000000000000000000000000010100     -20的原码
	//11111111111111111111111111101011       反码
	//11111111111111111111111111101100       补码
	unsigned int j = 10;
	//00000000000000000000000000001010    正数的原码反码补码相同 
	printf("%d\n", i + j);
	//11111111111111111111111111101100    i的补码
	//00000000000000000000000000001010    j的补码
	//11111111111111111111111111110110     i+j的补码
	//11111111111111111111111111110101    i+j的反码
	//10000000000000000000000000001010    i+j的原码
	//在内存中用补码计算,然后以原码的形式打印
} 你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:c语言数据存储加深练习-创新互联
标题来源:http://www.scyingshan.cn/article/jghse.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 