> 文章列表 > 关于类型转换

关于类型转换

关于类型转换

隐式转换

先看个例子

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)