short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
上面的代码应该是一个(低效)示例,它在C#中交换短(带符号的16位整数)的字节序。
但是上面的代码不能编译,因为C#在以下两行中隐式地从short转换为int:
第一种情况:
short test1 = ((value >> 8) & 0xFF);
第二种情况:
return (test1 | test2);
为什么要举行演员表演?我会简单地通过回到短期来达到预期的结果吗?像这样:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
如果不是为什么不呢?
请注意,我确实理解为什么C#在执行左移位时将短路转换为整数,因此分配了test2变量。
答案 0 :(得分:0)
这基本上是由Eric Lippert自己在另一个答案中回答的(即使问题完全不同)。