`
yeshaoting
  • 浏览: 686899 次
  • 性别: 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
分享到:
评论

相关推荐

    运用栈来进行数值转换的源码

    在IT领域,数值转换是一个常见的任务,特别是在编程和计算中。这里我们关注的是一个使用栈数据结构进行数值转换的方法。栈是一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,常被用于实现算法和解决各种...

    利用栈实现的数值转换的程序

    在IT领域,数据结构与算法是基础且核心的知识体系,其中栈作为一种特殊的线性...综上所述,利用栈实现数值转换的程序,不仅展示了栈的基本操作和应用,还涉及到了数值转换的算法逻辑,是数据结构学习中的一个重要案例。

    数据结构中的数值转换

    ### 数据结构中的数值转换 #### 实验背景与目标 本次实验的主题是“数据结构中的数值转换”,主要聚焦于如何利用栈这种数据结构实现不同进制数之间的转换。实验旨在加深学生对栈的理解,并掌握栈的基本操作,同时...

    IEEE754浮点数_数值转换_浮点数转换_

    **正文** IEEE754浮点数标准是计算机科学中用于表示和操作浮点数的国际标准,由电气...无论是软件开发、数据分析还是硬件设计,都可能涉及到浮点数的处理和转换,因此深入学习这一主题将对提升技术能力产生积极影响。

    ORACLE常用数值函数、转换函数、字符串函数介绍

    Oracle数据库系统提供了丰富的函数库,包括数值函数、转换函数和字符串函数,这些函数极大地扩展了SQL语言的功能,方便了数据库操作。以下是对标题和描述中提及的一些重要函数的详细解释: 1. **数值函数** - **...

    c#数值类型,转换和装箱拆箱

    数值类型之间的转换是C#中常见的操作,包括类型提升(Widening Conversions)和类型缩小(Narrowing Conversions)。类型提升是将范围小的类型转换为范围大的类型,例如,byte转int,不会丢失数据,因此是安全的。而...

    C语言实现数值类型转换源代码

    通过对C语言中数值类型转换的深入讨论,我们可以看到,虽然类型转换是编程中的基本操作,但其中蕴含着不少细节和潜在的问题。在实际开发中,程序员应该充分理解各种类型转换的特点和限制,合理运用,避免因类型转换...

    Boost.数值转换.zip

    除了基本的转换功能,`boost::numeric_converter`还支持用户自定义的转换函数和上下限检查,这使得在处理数值转换时能够有更高的灵活性和控制力。例如,可以在转换前对输入值进行有效性验证,或者在转换后对结果进行...

    VB-各种数制转换(非函数实现-用于算法和自定义函数研究)

    在VB(Visual Basic)编程中,数制转换是一项基本技能,尤其对于算法设计和自定义函数的研究至关重要。数制转换主要包括二进制、八进制、十进制和十六进制之间的相互转换。非函数实现意味着我们将不依赖内置的转换...

    全角半角转换函数.txt

    在IT领域,尤其是在文本处理和编码转换中,全角与半角字符的转换是一个常见的需求。全角(Full Width)和半角(Half Width)字符是根据...通过对上述函数的理解和应用,可以有效提升软件产品的国际化水平和用户体验。

    TIA博途Wincc中如何对变量的数值进行线性转换?.docx

    对于“DB4.DWORD”和“DB4.REAL”变量,同样执行相同的操作,确保转换后的数值正确。 4. **创建I/O域**: 在画面设计中,添加“I/O域”组件,如“I/O域_1”,“I/O域_2”和“I/O域_3”,并将它们分别关联到之前...

    行业教育软件-学习软件-数值转换机 1.0.zip

    "行业教育软件-学习软件-数值转换机 1.0.zip" 提供了一个实用的工具,帮助用户深入理解和实践各种数值之间的转换。下面我们将详细探讨数值转换的重要性和具体应用。 一、数值转换的基本概念 数值转换是指将一种...

    基于C++的数值转换

    在编程领域,数值转换是一种常见的任务,特别是在处理各种计算和数据表示时。在这个基于C++的数值转换项目中,我们探讨了如何利用栈这一数据结构来实现不同进制之间的转换,比如10进制到8进制。栈,通常被称为“后入...

    数字转换器(带源码)

    例如,可以使用`bin()`, `oct()`, `hex()`和`int()`函数在Python中实现这些转换。 3. **数字字符串与数值之间的转换**:有时我们需要将用户输入的字符串转换为数值,反之亦然。在Python中,`int()`和`float()`函数...

    sql 人民币大写转换函数

    此函数不仅关注基本的数字转换,还考虑了进位处理、精度设定以及数值范围的限制,确保了转换结果的准确性和适用性。 ### 函数结构与参数 函数`MoneyToCapital`接受三个参数: - `@mnyNumber`:一个`decimal(38,4)`...

    金额数值转换为汉字(源代码)

    按钮的Click事件处理器中,可以调用转换函数,将TextBox中的数值转换为汉字,并显示在界面上或其他地方。 5. **解决方案和项目文件**:Transform.sln是Visual Studio的解决方案文件,包含了项目及其依赖的配置信息...

    2进制数值转换

    本文将深入探讨“二进制数值转换”这一主题,以及它如何应用于液晶屏编程开发。 二进制(Binary)是计算机语言的基础,它只包含两个数字:0和1。二进制数系统在电子设备中广泛使用,因为它们能精确地表示电路的开...

    3MATLAB数据显示格式、逻辑值、数值和逻辑值转换、字符字符串和函数句柄.zip

    这个压缩包文件包含了关于MATLAB的几个关键知识点:数据显示格式、逻辑值、数值与逻辑值之间的转换、字符字符串以及函数句柄。下面将对这些主题进行深入讲解。 1. **数据显示格式**: MATLAB允许用户自定义数值...

    一个数字进制转换小工具

    通过这些文件,我们可以推测这个小工具的实现流程:用户在界面上输入要转换的数值和原始进制,选择目标进制,点击转换按钮后,程序会调用相应的转换函数(如DigitConv.cpp中的函数),将数值从一种进制转换到另一种...

Global site tag (gtag.js) - Google Analytics