正如上文短C# (也为其他语言编译器以及Java一样)
从short到int,long,float,double或decimal进行了预定义的隐式转换。
你不能将较大存储大小的非文字数字类型隐式转换为短类型(有关整数类型的存储大小,请参阅“整数类型表”)。例如,考虑以下两个短变量x和y:
short x = 5, y = 12;
以下赋值语句将产生编译错误,因为赋值运算符右侧的算术表达式默认情况下计算为int。
short z = x + y; // Error: no conversion from int to short
要解决此问题,请使用强制转换:
short z = (short)(x + y); // OK: explicit conversion
尽管目标变量具有相同的存储大小或更大的存储大小,但是可以使用以下语句:
int m = x + y;long n = x + y;
一个很好的后续问题是:
“为什么赋值运算符右侧的算术表达式默认计算为int”?
第一个答案可以在以下位置找到:
分类并正式验证整数常量折叠
在Java语言规范定义究竟如何整数来表示,如何整数算术表达式进行评估。这是Java的重要属性,因为该编程语言已设计为可用于Internet上的分布式应用程序。需要Java程序独立于执行它的目标机器来产生相同的结果。
相比之下,C(以及大多数广泛使用的命令式和面向对象编程语言)更加草率,并保留了许多重要特征。这种不正确的语言规范背后的意图很明显。通过使用目标处理器中内置的算术运算实例化源程序的整数算术,可以使相同的C程序在16位,32位甚至64位体系结构上运行。这样可以产生更有效的代码,因为它可以直接使用可用的机器 *** 作。只要整数计算仅处理“足够小的”数字,就不会出现不一致的情况。
从这个意义上讲,C整数算法是一个占位符,它不是由编程语言规范精确定义的,而是仅通过确定目标机器来完全实例化的。
Java精确定义了如何表示整数以及如何计算整数算术。
Java Integers--------------------------Signed | Unsigned--------------------------long (64-bit) |int (32-bit) |short (16-bit) | char (16-bit)byte (8-bit) |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)