根据以下规则,是否可以根据以下规则促进表达式中的操作数?
-
28-09-2019 - |
题
如果数字表达式包含不同数字类型的操作数(常数和变量),则根据以下规则将操作数促进到较大类型:
- 如果操作数是类型的
byte
,sbyte
,char
,short
,ushort
, ,他们被转换为int
类型 - 如果操作数之一是
int
, ,然后将所有操作数转换为int
- 如果表达式还包含类型的操作数
uint
和int
, ,然后将所有操作数转换为long
- 如果操作数之一是
long
, ,然后将所有操作数转换为long
- 如果表达式包含类型的操作数
ulong
和long
, ,然后将操作数转换为float
- 如果操作数之一是
float
, ,然后将所有操作数转换为float
- 如果操作数之一是
double
, ,然后将所有操作数转换为double
假设数字表达式包含不同类型的操作数,所有操作数将首先转换为单个数字类型,只有这样,运行时才能尝试计算结果?例如,如果变量 b1
和 b2
是 byte
类型,而 i1
是 int
类型,威尔 b1
和B2 get
在计算之前转换为int (b1+b2)
:
int i2=(b1+b2)+i1
其他提示
您的规则有一些真理的要素,但从技术上讲是不精确的。
这是C#语言规范的相关摘录
7.2.6.2二进制数字促销
预定义的操作数发生了二进制数字促销
+
,–
,*
,/
,%
,&
,|
,^
,==
,!=
,>
,<
,>=
, , 和<=
二进制操作员。二进制数字促销将这两个操作数隐含地转换为一种公共类型,如果非关系运算符也成为操作的结果类型。二进制数字促销包括按以下顺序应用以下规则:
- 如果两个操作数为类型
decimal
, ,另一个操作数转换为类型decimal
, ,或者如果其他操作数为类型,则会发生编译时间错误float
或者double
.- 否则,如果任何操作数都是类型
double
, ,另一个操作数转换为类型double
.- 否则,如果任何操作数都是类型
float
, ,另一个操作数转换为类型float
.- 否则,如果任何操作数都是类型
ulong
, ,另一个操作数转换为类型ulong
, ,或者如果其他操作数为类型,则会发生编译时间错误sbyte
,short
,int
, , 或者long
.- 否则,如果任何操作数都是类型
long
, ,另一个操作数转换为类型long
.- 否则,如果任何操作数都是类型
uint
另一个操作数是类型sbyte
,short
, , 或者int
, ,两个操作数转换为类型long
.- 否则,如果任何操作数都是类型
uint
, ,另一个操作数转换为类型uint
.- 否则,将两个操作数转换为类型
int
.
int i2=(b1+b2)+i1
根据上面的规范,是的, byte b1, b2
受到二元数字促进的约束 int
对于二进制操作员 +
.
不隶属于 StackOverflow