混合运算 数据类型转换

来源:互联网 发布:小猪微信营销系统源码 编辑:程序博客网 时间:2024/04/29 06:01

看下面例子,输出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


原创粉丝点击