扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
原码反码补码详解
成都创新互联公司是一家专注于成都网站设计、做网站与策划设计,阳春网站建设哪家好?成都创新互联公司做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:阳春等地区。阳春做网站价格咨询:18982081108整型提升详解
菜单//输出什么?
#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;
}
例题2://输出什么
#includeint main()
{char a = -128;
printf("%u\n",a);
return 0;
}
例题3:#incluudeintmain()
{int i= -20;
unsigned int j = 10;
printf("%d\n", i+j);
}
例1 解析:#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
例2解析:#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
例3解析:#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元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流