C语言格式符的问题 详见说明

比如int a=-1printf("%x,%o,%d",a,a,a);输出结果为fff,177777,-1 我的疑问在于 -1在内存单元的存放形式即补码形式如下 1 111111111111111所以八进制为177777 十六进制为fff 但是为什么10进制输出不是1*10的15次方加1*10的14次方……到最后1*10的0次方累加的和 这个是我概念上没搞清楚吧? C语言刚开始学 不太清楚 求说明

第1个回答  2013-07-21
楼主自己也说了我的疑问在于 -1在内存单元的存放形式即补码形式如下 1 111111111111111而且楼主也很好的把二进制第一位分开标注原因在于楼主使用的是%d格式符这样的话编译器就会把这个二进制的最高位看成是符号位如果楼主用%u格式符那么编译器就会把这个二进制按照无符号整型看待
第2个回答  2013-07-21
这个是概念性的东西,机器里面都存着是补码,要换来输出的,1111111111111111首位是1,计算机判别为负数,根据补码的换算,得到的结果是-1了……如果是0111111111111111输出的是你想的方法……
第3个回答  2013-07-21
你a是-1,输出-1不是很正常的吗
想要没有负数,用%u输出看看吧。
相似回答
大家正在搜