🍇类型转换
2021-1-17
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
类型的级别从高至低依次是:long double、double、float、unsigned long long、long long、unsigned long、long、unsigned int、int。例外的情况是,当long 和 int 的大小相同时,unsigned int比long的级别高。之所以short和char类 型没有列出,是因为它们已经被升级到int或unsigned int。

自动类型转换

当类型转换出现在表达式时,无论是unsigned还是signed的char和short都会被自动转换成int,如有必要会被转换成unsigned int(如果short与int的大小相同,unsigned short就比int大。这种情况下,unsigned short会被转换成unsigned int)。在K&R那时的C中,float会被自动转换成double(目前的C不是这样)。由于都是从较小类型转换为较大类型,所以这些转换被称为升级。
涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别 在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级。所谓降级,是指把一种类型转换成更低级别的类型。
 
当作为函数参数传递时,char和short被转换成int,float被转换成double。
 
类型升级通常都不会有什么问题,但是类型降级会导致真正的麻烦。原因很简单:较低类型可能放不下整个数字。
 
如果待转换的值与目标类型不匹配怎么办?这取决于转换涉及的类型。待赋值的值与目标类型不匹配时,规则如下。 1.目标类型是无符号整型,且待赋的值是整数时,额外的位将被忽略。 2.如果目标类型是一个有符号整型,且待赋的值是整数,结果因实现而异。 3.如果目标类型是一个整型,且待赋的值是浮点数,该行为是未定义的。
如果把一个浮点值转换成整数类型会怎样?
原来的浮点值会被截断。例如,23.12和23.99都会被截断为23,-23.5会被截断为-23。
 
 

强制类型转换运算符

通常,应该避免自动类型转换,尤其是类型降级。然而,有时需要进行精确的类型转换,或者在程序中表明类型转换的意图。这种情况下要用到强制类型转换(cast),即在某个量的前面放置用圆括号括起来的类型名,该类型名即是希望转换成的目标类型。圆括号和它括起来的类型名构成了强制类型转换运算符。
  • C
  • 基本数据类型printf()与转换说明
    目录