#include
#include
void main()
{
int x = -1; // 32个1
int y = 4294967295;// 32个1
printf("\n%d", x); //以有符号的方式显示为何都是-1
printf("\n%d", y);// 以有符号的方式显示为何都是-1
getchar();
}
//猜想,是否这2个变量以%d的方式输出的时候是先转换成原码再输出的?
可以联系变量在内存中的存储方式来解决这个问题。您定义的是有符号整形变量,在内存中占据32位,最高位为符号位。4294967295在内存中为11111111111111111111111111111111。最高位为1,可知是负数。而我们知道:数值在计算中一律用补码,已知一个数的补码,求原码的操作其实就是对该补码再求补码,求负数的补码时:符号位不变。剩下的位按位取反+1;所以为:0000000000000000000000000000+1=0000000000000000000000000000001,加上符号位,可知是-1
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。