`
yeshaoting
  • 浏览: 667416 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数值转换和提升

    博客分类:
  • J2SE
阅读更多

首先,看一个测试程序:

 

/**
 * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)
 * All rights reserved.
 * Author: Jarg Yee <yeshaoting@gmail.com>
 * http://jarg.iteye.com/
 */

public class Test
{
	public static void main(String[] args)
	{
		byte a = 2,b = 3;
		byte c = 2+3;
		//byte c = a+b;
	}
}

 

 对于语句: byte c = 2+3;能顺利编译通过.

 但是对于语句: byte c = a+b;却出现下图所示的编译期错误,错误原因是数值转换可能损失精度.

 

原因:

 

赋值转换: 发生在把表达式的值赋给变量的时候,表达式的类型必须转换成变量的类型.赋值上下文允许等同转换,放宽基本转换或者放宽引用转换.

例外,如果满足以下全部条件,也可以使用缩窄基本转换:
1. 表达式是int类型的常数表达式
2. 变量类型是byte,short或char
3. 表达式的值可以用变量的类型表示

 

数值提升: 作用于算术操作符的操作数.
有两种数值提升,它们是单目数值提升(单个操作数)和双目数值提升(二个操作数).
单目数值提升: 把类型为byte,short或char的操作数转换成int,否则不对操作数操作.

双目数值提升:
     如果有一个操作数是double类型的,则把另一个转换成double.
     如果有一个操作数是float类型的,则把另一个转换成float
     如果有一个操作数是long类型的,则把另一个转换成long
     否则,则把两个操作数都转换成int类型.

---------------------------------------------------------------------------------------
对于上述二条语句都是先进行数值提升,再进行赋值转换(赋值的优先级低于数值操作).

 

语句: byte c = 2+3; 满足赋值转换缩窄基本转换的全部条件.

 

 

所以,2+3表达式结果值类型为int,可以通过缩窄转换成byte型,赋值给byte类型变量c.

 

而语句: byte c = a+b; 不满足第一条(其表达式是变量表达式).

对于,语句: byte c = a+b; 先发生数值提升操作(双目数值提升),将表达式结果转换成int类型,然后执行int类型值赋值给byte变量的操作.

 

所以,a+b在数值提升阶段将a,b放宽到int类型,运算后的表达式结果值也为int型.

赋这结果值值给byte类型变量就会损失精度,出现编译期错误.

 

类似语句:

byte d = '3'; // 编译通过

char c = '3';
d = c; // 编译不通过,单目数值提升阶段将c的类型提升为int类型,然后赋值给byte类型变量.

int e = c; // 编译通过,由此粗略可见上一条语句中字符型变量c被提升为int类型.

 

  • 大小: 10.8 KB
分享到:
评论

相关推荐

    JavaScript 动态网页实例 - 数据类型转换.rar

    类型转换是网页编程不可或缺的内容,本文先介绍自动类型转换,接着是强制性的显式类型转换,最后如何将基本数据类型提升为对象。 JavaScript的数据类型分为基本数据类型和复合数据类型。复合数据类型主要有对象、...

    函数指针的强制类型转换实现代码

    废话不多少,直接上代码 代码如下:/********************************************************************************* 程序名称:函数指针的强制类型转换 ** 程序描述:** 性能提升:** 程序版本:V1.0*********...

    MySQL 基础 - 字符串函数.md

    此Markdown文档提供了MySQL数据库中...通过掌握这些字符串函数的知识,您将能够更加高效地进行数据处理和查询,提升数据库操作的效率和准确性。无论是日常开发还是数据分析,都可以从这个文档中获得实用的知识和技巧。

    种子注入强度对周期极化光学参量振荡器转换效率影响的数值研究

    建立了基于掺氧化镁周期极化铌酸锂晶体的脉冲光学参量振荡器模型,数值研究了种子注入强度对光学参量振荡器信号光转换效率的影响。仿真结果表明,增加种子光强度可以抑制光学参量振荡器的多纵模运转,大幅提升信号光...

    基于核函数与局部信息的凸优化分割模型

    针对C-V模型不能准确分割非同质和高噪声的图像,且计算效率比较低的特点,作出如下改进...实验结果表明,该模型能够有效地分割非同质和高噪声图像,与C-V、RSF和DRLSE模型相比,在运行速度和分割精度上有了很大的提升。

    升压转换器:升压转换器是一种 DC/DC 电源转换器,可将电压从输入(源)提升到输出(负载)。 在连续传导中-matlab开发

    升压转换器是一种 DC/DC 电源转换器,可将电压从输入(源)提升到输出(负载)。 在连续导通模式下(通过电感的电流永远不会降至零),升压转换器的理论传递函数为: 占空比在哪里.0.5 在此示例中,转换器从 250 V...

    C#语言规范(4.0版本)

    6.1.12 匿名函数转换和方法组转换 113 6.2 显式转换 113 6.2.1 显式数值转换 114 6.2.2 显式枚举转换 115 6.2.3 可以为 null 的显式转换 115 6.2.4 显式引用转换 116 6.2.5 拆箱转换 117 6.2.6 显式动态转换 117 ...

    微软C#语言规范,C#语言教程中文版

    6.1.12 匿名函数转换和方法组转换 113 6.2 显式转换 113 6.2.1 显式数值转换 114 6.2.2 显式枚举转换 115 6.2.3 可以为 null 的显式转换 115 6.2.4 显式引用转换 116 6.2.5 拆箱转换 117 6.2.6 显式动态转换 117 ...

    C#语言规范4.0

    6.1.12 匿名函数转换和方法组转换 113 6.2 显式转换 113 6.2.1 显式数值转换 114 6.2.2 显式枚举转换 115 6.2.3 可以为 null 的显式转换 115 6.2.4 显式引用转换 116 6.2.5 拆箱转换 117 6.2.6 显式动态转换 117 ...

    C#语言规范(2.0,3.0,4.0合集)

    6.1.12 匿名函数转换和方法组转换 113 6.2 显式转换 113 6.2.1 显式数值转换 114 6.2.2 显式枚举转换 115 6.2.3 可以为 null 的显式转换 115 6.2.4 显式引用转换 116 6.2.5 拆箱转换 117 6.2.6 显式动态转换 117 ...

    C#_语言规范_4.0_中文版

    6.1.12 匿名函数转换和方法组转换 113 6.2 显式转换 113 6.2.1 显式数值转换 114 6.2.2 显式枚举转换 115 6.2.3 可以为 null 的显式转换 115 6.2.4 显式引用转换 116 6.2.5 拆箱转换 117 6.2.6 显式动态转换 117 ...

    光纤非线性效应对光子时间拉伸模数转换系统性能的影响

    从理论推导、数值仿真和实验验证三个方面综合分析了非线性效应对PTS-ADC系统性能的影响,包括系统功率传输函数、载波与谐波功率比(CIR)。结果表明:第一段色散光纤中的非线性效应不会使得被采样模拟信号失真,相反...

    论文研究-高斯隶属度优化的超分辨率随机森林学习算法.pdf

    为提升单图像超分辨率性能,采用高斯隶属度函数构建随机森林各决策节点的决策函数,将决策函数的输出值由0和1的确定值转换到0~1之间的概率值,并在叶节点上依据数据划分路径上各决策节点概率的乘积进行预测,依据...

    C#教程(语言规范)

    6.1.11 匿名函数转换和方法组转换 ... 102 6.2 显式转换 102 6.2.1 显式数值转换. 102 6.2.2 显式枚举转换. 104 6.2.3 可以为 null 的显式转换. 104 6.2.4 显式引用转换. 105 6.2.5 拆箱转换.. 105 6.2.6 ...

    从数据库中取数VB版

    · 无须系统安装Excel,就可以和Excel文件完全转换,转换效率更高,效果更完美 · 强大的自定义函数功能,用户可根据自己的业务逻辑添加自己的函数 · 极大地提升了图表功能,图表种类和效果比肩Excel · 资源...

    java编程规范(第三版)

    第5章 转换和提升 60 5.1 转换的种类 62 5.2 赋值转换 71 5.3 方法调用转换 76 5.4 字符串转换 77 5.5 强制转换 77 5.6 数值提升 82 第6章 名称 85 6.1 声明 86 6.2 名称和标识符 86 6.3 声明的作用域 88 ...

    关系型数据库性能体系设计和效率提升.docx

    关系型数据库性能体系,设计和效率提升 1 1 前言 2 1.1目的 2 1.2预期的读者和阅读建议 2 2 数据库模型设计规范 2 2.1 数据库建模原则性规范 2 2.2 实体型之间关系认定规范 2 2.3 范式化1NF的规范 3 2.4 范式化2NF的...

    用友华表cell组件

    4、无须系统安装Excel,就可以和Excel文件完全转换,转换效率更高,效果更完美; 5、强大的自定义函数功能,用户可根据自己的业务逻辑添加自己的函数; 6、极大地提升了图表功能,图表种类和效果比肩Excel; 7、资源...

    Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)

    易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。 一、JSON字符串转换为JSON对象: eval&#40;&#41; 和 JSON.parse eg- json字符串: var data = '{ "name": "dran", "sex": "man

Global site tag (gtag.js) - Google Analytics