zoukankan      html  css  js  c++  java
  • 类型转换

    一 自动类型转换

    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.

  • 相关阅读:
    用GDB调试程序(一)
    ZOJ Problem Set
    android 去除标题
    【hadoop之翊】——基于CentOS的hadoop2.4.0伪分布安装配置
    layoutSubviews总结
    用数据说话,外贸产品选择(中篇)-google趋势分析法
    Apache介绍
    浅谈android4.0开发之GridLayout布局
    Android GridView 分页加载数据
    Android TableLayout中的使用说明
  • 原文地址:https://www.cnblogs.com/hyhl23/p/4161066.html
Copyright © 2011-2022 走看看