关于短路的C#按位操作 - 为什么要转换为int?

时间:2011-01-19 14:36:32

标签: c# syntax bitwise-operators implicit-cast

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变量。

1 个答案:

答案 0 :(得分:0)

这基本上是由Eric Lippert自己在另一个答案中回答的(即使问题完全不同)。

看看Integer summing blues, short += short problem