c语言,为什么?

[复制链接]
查看11 | 回复4 | 2007-12-3 14:57:04 | 显示全部楼层 |阅读模式
这是进制问题,%o输出的是8进制形式-7=1111 1111 1111 0001的形式存储于计算机,所以以8进制输出的时候是177771
回复

使用道具 举报

千问 | 2007-12-3 14:57:04 | 显示全部楼层

回复

使用道具 举报

千问 | 2007-12-3 14:57:04 | 显示全部楼层
printf("%o,%o\n",a.c[0],a.c[1]); 你把以上这句语句的"%o"改为"%d"就OK了...可能是你还没接触过"%o"(即:八进制数据类型)"%d"就是我们最常用的"十进制"(逢十进一)八进制是逢八进一的.%d : 0,1,2,...,9,10,11 (0-11总共12个数)%o : 0,1,2,...,7,10,11 (0-7总共8个数+10-11共2=10位数)从以上两个简单例子就可以看清楚不同进制数的区别和原理.你自己创建了一个union体,用union创建了实例:a而且你只对a.k=-7;赋值,没有给a.c[]赋值。所以c[0]和c[1]的值都是随机值,你可以试试。实例:int a ;printf("%d",a);这个a你没有给它赋值,所以结果是一个系统自动产生的随机数。
回复

使用道具 举报

千问 | 2007-12-3 14:57:04 | 显示全部楼层
负数存储是以补码的形式存储的如果你以%d输出,会出现-7,以8进制输出只能输出补码。
回复

使用道具 举报

千问 | 2007-12-3 14:57:04 | 显示全部楼层
你没有初始化两个字符变量,又以一八进位制输出字符型数据,在不同的机器的显示结果不一样,在我电脑上编译执行后是37777777771,3777777777
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行