首页
社区
课程
招聘
[旧帖] [求助]有关C语言八进制的问题。朋友帮帮忙 0.00雪花
发表于: 2012-5-25 23:08 1731

[旧帖] [求助]有关C语言八进制的问题。朋友帮帮忙 0.00雪花

2012-5-25 23:08
1731
我用的是vs2010写C语言代码,int型所占位数为32位。
下面先贴一段代码。
int main()
{unsigned int i,k;
i=-1;
k=4294967295;
printf("%o,%o",k,i);
system("pause");
return(0);
}
问题1:上面代码一开始,我就声明i,k为无符号数。这时候是不是系统就会划分两个32位的空间分别给i,k.unsigned int型表示范围为0-4294967295.
那i=-1为什么没有报错?
问题2:上面代码的输出结果i和k都为37777777777.
他们的八进制都一样,那是否i和k的二进制也一样呢?都为32个1?
如果一样,二进制为32个1,那输出此二进制数(32个1)的十进制数是该输出-1还是4294967295?
问题3:我将上述代码unsigned int i,k;改成int i,k;输出结果还是同样两个都为37777777777.int型数的范围为-2147483648~2147483647.那么k=4294967295;不是应该报错吗?
知道的朋友帮下忙。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
无符号只能是整数吧,
2012-5-26 12:40
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
赋值的时候做了默认的强制转换,-1的补码表示跟unsigned的最大值是一样的
2012-5-26 13:21
0
雪    币: 54
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
十六进制0xffffffff, 如果按无符号数来看待就是0xffffffff,但如果按有符号数来对待的话,最高位1代表符号位为负,还原成原码,先减1,然后取反正好为-1,所以-1和0xffffffff没多大区别,你的代码中把-1 当做无符号数来输出,那就是0xffffffff,你可以试着把printf后面的换为常量0xffffffff输出的还是你那个结果。。。
2012-5-27 16:18
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
八进制的37777777777和那个十进制的4294967295用十六进制都是0xffffffff。在内存中都是二进制全1,都是一样的。   i,k都是在栈中分配的空间,里面的值是全1。至于编译器报不报错,个人感觉,4294967295和-1的二进制都在int/unsigned int的表示范围。如果你把4294967295改为4294967296,32位表示不了了,就会报错。
2012-5-31 16:08
0
游客
登录 | 注册 方可回帖
返回
//