首先,看一个测试程序:
/**
* 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浮点数标准是计算机科学中用于表示和操作浮点数的国际标准,由电气...无论是软件开发、数据分析还是硬件设计,都可能涉及到浮点数的处理和转换,因此深入学习这一主题将对提升技术能力产生积极影响。
Oracle数据库系统提供了丰富的函数库,包括数值函数、转换函数和字符串函数,这些函数极大地扩展了SQL语言的功能,方便了数据库操作。以下是对标题和描述中提及的一些重要函数的详细解释: 1. **数值函数** - **...
数值类型之间的转换是C#中常见的操作,包括类型提升(Widening Conversions)和类型缩小(Narrowing Conversions)。类型提升是将范围小的类型转换为范围大的类型,例如,byte转int,不会丢失数据,因此是安全的。而...
通过对C语言中数值类型转换的深入讨论,我们可以看到,虽然类型转换是编程中的基本操作,但其中蕴含着不少细节和潜在的问题。在实际开发中,程序员应该充分理解各种类型转换的特点和限制,合理运用,避免因类型转换...
除了基本的转换功能,`boost::numeric_converter`还支持用户自定义的转换函数和上下限检查,这使得在处理数值转换时能够有更高的灵活性和控制力。例如,可以在转换前对输入值进行有效性验证,或者在转换后对结果进行...
在VB(Visual Basic)编程中,数制转换是一项基本技能,尤其对于算法设计和自定义函数的研究至关重要。数制转换主要包括二进制、八进制、十进制和十六进制之间的相互转换。非函数实现意味着我们将不依赖内置的转换...
在IT领域,尤其是在文本处理和编码转换中,全角与半角字符的转换是一个常见的需求。全角(Full Width)和半角(Half Width)字符是根据...通过对上述函数的理解和应用,可以有效提升软件产品的国际化水平和用户体验。
对于“DB4.DWORD”和“DB4.REAL”变量,同样执行相同的操作,确保转换后的数值正确。 4. **创建I/O域**: 在画面设计中,添加“I/O域”组件,如“I/O域_1”,“I/O域_2”和“I/O域_3”,并将它们分别关联到之前...
"行业教育软件-学习软件-数值转换机 1.0.zip" 提供了一个实用的工具,帮助用户深入理解和实践各种数值之间的转换。下面我们将详细探讨数值转换的重要性和具体应用。 一、数值转换的基本概念 数值转换是指将一种...
在编程领域,数值转换是一种常见的任务,特别是在处理各种计算和数据表示时。在这个基于C++的数值转换项目中,我们探讨了如何利用栈这一数据结构来实现不同进制之间的转换,比如10进制到8进制。栈,通常被称为“后入...
例如,可以使用`bin()`, `oct()`, `hex()`和`int()`函数在Python中实现这些转换。 3. **数字字符串与数值之间的转换**:有时我们需要将用户输入的字符串转换为数值,反之亦然。在Python中,`int()`和`float()`函数...
此函数不仅关注基本的数字转换,还考虑了进位处理、精度设定以及数值范围的限制,确保了转换结果的准确性和适用性。 ### 函数结构与参数 函数`MoneyToCapital`接受三个参数: - `@mnyNumber`:一个`decimal(38,4)`...
按钮的Click事件处理器中,可以调用转换函数,将TextBox中的数值转换为汉字,并显示在界面上或其他地方。 5. **解决方案和项目文件**:Transform.sln是Visual Studio的解决方案文件,包含了项目及其依赖的配置信息...
本文将深入探讨“二进制数值转换”这一主题,以及它如何应用于液晶屏编程开发。 二进制(Binary)是计算机语言的基础,它只包含两个数字:0和1。二进制数系统在电子设备中广泛使用,因为它们能精确地表示电路的开...
这个压缩包文件包含了关于MATLAB的几个关键知识点:数据显示格式、逻辑值、数值与逻辑值之间的转换、字符字符串以及函数句柄。下面将对这些主题进行深入讲解。 1. **数据显示格式**: MATLAB允许用户自定义数值...
通过这些文件,我们可以推测这个小工具的实现流程:用户在界面上输入要转换的数值和原始进制,选择目标进制,点击转换按钮后,程序会调用相应的转换函数(如DigitConv.cpp中的函数),将数值从一种进制转换到另一种...