博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

帅得不敢出门

热爱c++ 博客文章多为转载(帖子后面有带原文链接的)以做收藏 若有误处 望多多赐教
   stupidpig.cublog.cn
关于作者  
姓名:帅得不敢出门
职业:学生
年龄:23
位置:福州
C++群:24372952  3503799
个性介绍:交朋会友

我的分类  




C++中当unsigned和int间的隐式转换

当unsigned遇到int时,隐式转换是怎样的呢?

看如下代码:

#include <stdio.h>

int main()
{
    unsigned int a = 1;
    int b = -2;
    printf("a + b = %d\n", a + b);
    printf("is a + b > 0? %d\n", a + b > 0);
    while (1);
}

第一个输出,a + b = -1,           可以理解

第二个输出,a + b > 0 ?   1        为什么?-1不小于0吗?为什么大于0是成立的?

答案出在隐式转换里头,当unsigned类型的a和int类型的b相加时,结果将隐式转换为unsigned类型,

第一个输出结果之所以是-1,是因为我们已经将它的输出格式限定为%d了,所以它被强制转换为int。

而在第二个输出中,a + b 返回的是unsigned,而(unsigned)-1的机器码是0xffffffff(这里默认int为32位),如果用unsined类型来解读这个机器码,那结果将是2^32 -1,比0大得多了,所以a + b > 0 成立。

 原文地址 http://hi.baidu.com/roofalison/blog/item/4d135efa236f161aa9d31174.html
 发表于: 2008-06-09,修改于: 2008-06-09 14:44 已浏览342次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.05596

京ICP证041476号