混合运算 数据类型转换

看下面例子,输出a+b为多少?

#include<iostream.h>

void main()
{
unsigned int a=6;
int b=-20;
//cout<<a<<endl;
//cout<<(unsigned int)b<<endl;
cout<<a+b;

}

结果为4294967282,为什么不是-14呢?这地方有个混合运算在这!这是int和unsigned int 的计算,按规则都是转换为unsigned int 参与计算,b转化为unsigned int 为4294967276。

转化规则如下:char,short int ->int ->unsigned int ->long->double; flout->double.就是说低级转化为高级的,再进行计算,这个过程是自动完成的!

当然还有强制转化。

输出无符号 b的十六进制为ffffffec,其十进制为4294967282。具体怎么来的?看下面:(计算机32位的)

20的源码(16进制):00000014 最后两位转化为二进制,便于取反0001 0100

反码:ffffff(11110 1011)

补码:加+1 ffffff(11110 1100) 即为:ffffffec,无符号的数为4294967282。

 
类型转换的注意问题

 1、表达式的类型转换是临时的,式中的常量或变量的原类型均不改变。

 2、把运算结果赋给变量时,若运算结果的数据长度 > 变量的数据长度,会截去超长部分,
  将可能导致精度降低或产生不确定的值。

 3、类型转换占用系统时间,过多的转换会降低程序运行效率。除必要的外,应选择合适的数据类型。
 部分结果 copy: http://zhidao.baidu.com/question/73583558.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值