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⊙)哦!

转载于:https://www.cnblogs.com/wensheng/archive/2009/10/14/1583589.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值