• 类型转换


    一 自动类型转换

    1. 非赋值运算的类型转换

       

    水平方向的转换:所有的 char, short 型自动转换成 int 型,左右的 unsigned short 型自动转换成 unsigned 型,所有的 long 型自动转换成 unsigned long 型,所有的 float 型自动转换成 double 型。

    垂直方向:经过水平方向的转换,如果参加运算的数据类型仍然不相同,再将数据自动转换成其中级别最高的类型。

    栗子 -----------

    设变量  ac 的类型是 char, 变量 bi 的类型是  int , 变量 d 的类型是 double ,求解表达式 ac + bi - d。运算次数是:先计算 ac + bi, 将 ac 转换为 int 型后求和,结果是 int 型, 再将 ac + bi 的和转换为 double 型, 再与 d 相减, 结果是 double 型。

    2.赋值运算的类型转换

    赋值运算时,将赋值号右侧表达式的类型自动转换成赋值号左侧变量的类型。

    例如:

    .变量 x 的类型是 double, 计算表达式 x = 1. 运算时,先将 int 型常量  1 转换成 double 型常量 1.0 ,然后赋值给 x , 结果是 double 型。

    .short a;  char b; long c ;  c = a + b;  先计算 a + b, 将 a, b 转换为 int 型求和,结果是 int 型;再将和转换成 c 的类型 long ,然后赋值给 c, 结果是long 型。

    利用上面的规则,如果赋值号右侧表达式的类型比赋值号左侧变量的类型界别高,运算精度会降低。

    如 int i = 2.56  运算时先将 double 型常量 2.56 转换成 int  型常量 2, 然后赋值给 i , 结果是 int 型。

    所以:在赋值运算时,赋值号两侧的数据类型最好相同,至少右侧数据的类型要比左侧数据的类型几倍地,或者右侧数据的值在左侧变量的取值范围内,否则会导致运算精度降低,甚至出现意想不到的结果。

    二 强制类型转换

    使用强制类型转换运算符,可以将一个表达式转换成给定的类型。

    (类型名)表达式;

    例:(int)3.8 = 3;

    注意:无论是自动类型转换,还是强制类型转换,都是为了本次运算的需要,对数据的类型进行临时转换,并没有改变数据的定义,其本质依然还是自己原先的数据类型。

    例如现在有 int i;  (double)i 是 double 型,i 的类型并没有改变,仍然是 int 型。

    强制类型转换运算符的优先级较高,结合性是从右到左。

    (int)3.8 + 1.3 等价 ((int) 3.8) + 1.3 结果是 4.3; 而 (int)(3.8 + 1.3) 的结果是 5.

  • 相关阅读:
    option 变为不可选
    html表格 横跨多行跨多列
    ultraEdit 关键字颜色 与 字体模糊 解决办法
    更改U盘 硬盘背景
    js 函数带值。调用
    Blitz: a collection of software designed to support a universitylevel course on Operating Systems
    不错的Qt入门
    Linux命令行技巧zz
    rvalue_references
    http://channel9.msdn.com/
  • 原文地址:https://www.cnblogs.com/hyhl23/p/4161066.html
Copyright © 2020-2023  润新知