类型转换

来源:互联网 发布:淘宝重复铺货怎么处罚 编辑:程序博客网 时间:2024/06/03 15:04

以前,你知道一个变量的值存储为二进制位的序列,和变量的数据类型告诉编译器如何翻译成有意义的值的位。经常的情况是,需要将数据从一种类型转换为另一种类型。这就是所谓的类型转换

隐式类型转换是自动完成的编译器每当从不同类型数据的混合。当从一种类型的值分配给另一个类型,编译器会隐式地转换为价值为价值的新类型。比如说呢

12double dValue = 3; // implicit conversion to double value 3.0int nValue = 3.14156; // implicit conversion to integer value 3

在上面的例子中,3的值被提升为double值然后分配值。编译器将不会抱怨这样做。然而,某些类型的转换本质上是不安全的,如果编译器可以检测到一个不安全的转换被隐式地请求,它会发出警告。在第二个例子中,的双值小数部分被下降是因为不支持小数的整数。由于转换成一个双int通常会导致数据丢失(这是不安全的),编译器如Visual Studio Express 2005通常会发出警告。其他不安全的转换涉及分配无符号变量符号变量(反之亦然分配大的整数(例如:一个4字节长)一个较小的尺寸的整数变量(如2字节短)

警告:微软的Visual C + + 2005似乎没有问题,不安全警告符号/无符号的转换

当计算表达式,编译器将每个表达成单独的子表达式。通常,这些表达式涉及一元或二元操作符和操作数。二元操作符需要操作数最多的是相同的类型。如果使用的是混合类型的操作数时,编译器会将一个操作数同意与其他。要做到这一点,它使用一个层次的数据类型

例如,在表达2 + 3.14159,+操作符需要操作数具有相同的数据类型。在这种情况下,左操作数是一个整数,与右操作数是一个双。由于双中较高的层次,int被转换为双。因此该表达式被评估为2±3.14159值为5.14159

一个好的问题是,“为什么是整数树的底部?这个层次可以导致了一些有趣的问题。例如,您可能希望表达对5U - 10 - 5(5U意味着5为无符号整数)。但在这种情况下符号整数(10提高到一个无符号整数这个表达式的结果是无符号整数4294967291但在这种情况下符号整数(10提高到一个无符号整数这个表达式的结果是无符号整数4294967291

许多混合转换按预期工作。例如,int值= 10×2.7的结果27。例如,int值= 10×2.7的结果27。

10是提升到一个浮动10×2.7的值为27,和27被截断为整数编译器会抱怨许多新的程序员尝试这样的事情:浮fvalue = 10 / 4;。许多新的程序员尝试这样的事情:浮fvalue = 10 / 4;。

然而,因为10和4都是整数,不提倡发生。整数除法是10 / 4的表现导致2的价值然后被隐式地转换为2fvalue整数除法是10 / 4的表现导致2的价值然后被隐式地转换为2fvalue

你使用的文字值的情况下如10或4)更换一个或两个整数的值与一个浮点字面量的值(10或4)将导致两个操作数被转换为浮点值将完成使用浮点运算


0 0
原创粉丝点击