unsigned int 与 int 类型之间的隐式转换

今天在csdn上看到一个题目,差点被迷惑住了
int a=100;
unsigned 
int i=99;
cout 
< <i-< <endl;
其结果输出是4294967295;
若改为unsigned 
short i=99;
输出就是
-1
楼主问为什么?我确实第一反应回答不上来。也只能根据结果做出猜测,
结果一楼的朋友说了这么个原则:“二者长度相同,按照被减数的的类型; 二者长度不同,按长的”,自己一想也对!
但是结果又看了下面朋友的回答,其中有个比较权威的人事说了:
unsigned int比int"大"
int 比 unsigned short"大"

所以第一个向老大看齐,就是unsigned int
第二个的老大是int
就感到无比的迷惑了,接着一楼的朋友发现了自己的错误,紧接着跟帖声明了自己的错误(值得学习)


同时在做此题的时候还学到另一个知识:
就是用printf的问题
我对上面的输出代码改为
printf("%d",i-a);
输出的结果是-1,我对上面二人的说法迷惑了,但是我很快发现了我用的输出方式错误的问题,这导致了输出的结果又发生了强制类型的转换,
真是“范伟老师的一句经典的话'防不胜防'!”,所以基础知识一定要打牢固了(⊙o⊙)哦!
posted @ 2009-10-14 23:53  文生  阅读(14880)  评论(1编辑  收藏  举报