关于类型转换
隐式转换
先看个例子
int a {500};
unsigned b {1000};
std::cout<<a-b;
这里的输出结果并不为-500。因为最后输出结果的类型自动转换成了unsigned,unsigned是正整数型
类型转换顺序表(由高到低)
long double |
double |
float |
unsigned long long |
long long |
unsigned long |
long |
unsigned int |
int |
知识扩展*:short、char之间计算不会互相转换,而是转换成int再计算,即使是同类型间计算也会先转换成int再计算
C语言强制转换
语法:(int)(a-b)
缺点:维护时,想要找到这个类型,并不方便,因为如果查找int类型,如果到处都是这个int类型,并不好找
优点:简单快捷,直接,直接转换
C++静态转换
语法:static_cat<int>(a-b)
优点:相对安全,由编译器检测是否能转换
赋值转化
用等于号,赋值时会自动转换
float b{500.00};
int a=b;
这里b会自动转换成int型
思考
为什么这里结果是个很大的整数
#include<iostream>
#include<cassert>
void main()
{
int a{ 500 };
unsigned b{ 1000 };
std::cout << (long long )(a-b);
system("pause");
}
原因:因为a-b得到的结果首先是个unsigned型的,然后才被转换成了long long型
解决办法:将(long long)(a-b) 改为 (long long)a - (long long)b,这样 a 和 b 就会先被强制转换为 long long 类型
sizeof关键字
语法sizefo(int)