类型转换——隐式转换
定义:不同类型之间的相互转换,也称作“自动类型转换”,由编译器自行转换。
低向高转换,如下:
int i = 66665;
short s = 1;
float f = 5.5f;
如果我想让 s 赋值给 i ,即:
i = s ;
那么就是进行了“隐式转换”,并且这个转换是不会出现任何数据丢失的,因为这是由低字节向高字节进行转换,也称“向上转换”。转换成功的原因是:将低字节的short类型变量 赋值给 高字节的int类型变量。这是成功关键。如何知道字节的高低呢?可以使用 “ sizeof()”这个函数,它会传出一个值,值的大小决定字节大小。如本例子中:
cout << sizeof(int) <<endl;
cout << sizeof(short) <<endl;
int是4,short是2,所以int比short字节更大,所以这个隐式转换是完全无误的,由此得出结论,低字节向高字节转换是完全可行的。
但是float的字节同样也是 4,如果想将其赋值给 i,是否能成功呢?这个通过什么判断呢,这就要判断变量类型的精度了。
int:存入的是整数,整数是完全精准的,无误差
float:存入的是小数,是有精度误差的
因此:int精度 > float精度
i = f ;
也是可以成功赋值,并且完全无误。
总结:
先看字节大小,小的赋值给大的 => 完全可行;
字节一样,看精度,精度小的赋值给精度大的 => 完全可行。
高向低转换,
同样是上面的例子,如果将 i 赋值给 s,那么会发生什么?
当 i 的值为66665时,赋值给 s ,即:
s = i;
输出为 :1129
这是因为发生了“数据溢出”,因为 s 是short类型,它是短整型,取值范围在:-32768~32767,而 i 的值是66665,明显已经超出了short的范围,这里有一个万能公式用于验证这个结果,即:
结果值 = 原值 – 65536,将我们的数据代入就是:66665 – 65536 = 1129
所以输出是:1129
由此我们得到结论,将高精度(大字节)向低精度(小字节)进行转换时,会发生数据异常,因此强烈不推荐这样使用。
无符号和有符号之间的转换
int i = -1;
unsigned int ui = i ;
将 int型 i 赋值给 unsigned int 型 ui,此时输出 ui的值,绝不会是1,而是4294967295,这个数得到的逻辑和上面 int型 赋值给 short型基本一样,但最重要的是两个变量在符号,即:正负数上不一致,这也就回到我们的标题上,即:无符号和有符号之间的转换 => 会出问题。
但是,如果明确知道要赋值的i,它的值始终会在正数区域取值,那么可以这样赋值,但不推荐,毕竟会有隐患。
常用类型字节表
| 类型 | 字节数 |
| bool | 1 |
| char | 1 |
| short | 2 |
| int | 4 |
| float | 4 |
| double | 8 |
| long long | 8 |
![中国移动27校招笔试[特殊字符]经验|题型全梳理、附备考攻略-171主机测评](https://www.171host.com/wp-content/uploads/2026/09/20260916122900-6aaa8b8c26a49-220x150.jpg)



