Bitshifting Int16仅适用于文字

时间:2012-10-19 23:10:50

标签: c# bit-shift short

当我在VS中编写此代码时,它不起作用(“无法将'int'隐式转换为'short'。存在显式转换。您是否错过了演员?”):

short A = 5;
short B = 1 << A;

然而,这段代码绝对没问题:

short A = 1 << 5;

我知道我可以通过将整个表达式作为简短表达来消除错误,但任何人都可以告诉我为什么会发生这种情况吗?

2 个答案:

答案 0 :(得分:5)

因为A不是文字,所以编译器不知道结果可以表示为short。因此需要一个明确的演员。使用文字5,编译器会看到结果为32,可以放在short中。

答案 1 :(得分:2)

C#语言规范4.0在6.1.9中说明:

  

int类型的常量表达式(第7.18节)可以转换为类型   sbyte,byte,short,ushort,uint或ulong,提供了值   constant-expression在目标类型的范围内。

常量表达式的转换是其中隐含的特殊情况之一(6.1)。