开发者社区> 问答> 正文

c中%d的方式显示2个不同的变量,输出的结果为什么一样

#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的方式输出的时候是先转换成原码再输出的?

展开
收起
a123456678 2016-03-20 10:57:52 2290 0
1 条回答
写回答
取消 提交回答
  • 可以联系变量在内存中的存储方式来解决这个问题。您定义的是有符号整形变量,在内存中占据32位,最高位为符号位。4294967295在内存中为11111111111111111111111111111111。最高位为1,可知是负数。而我们知道:数值在计算中一律用补码,已知一个数的补码,求原码的操作其实就是对该补码再求补码,求负数的补码时:符号位不变。剩下的位按位取反+1;所以为:0000000000000000000000000000+1=0000000000000000000000000000001,加上符号位,可知是-1

    2019-07-17 19:09:06
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载