2011-01-19 117 views
6
short BitwiseTest(short value) 
{ 
    short test1 = ((value >> 8) & 0xFF); 
    short test2 = unchecked((short)((value << 8) & 0xFF00)); 
    return (test1 | test2); 
} 

上面的代码应该是一个(低效率)的例子,在C#中交换一个简短的(有符号的16位整数)的字节序。C#按位操作短裤 - 为什么投射到一个int?

然而上面的代码不能编译,因为C#被隐式地从短转换成一整型在两个下列行:

第一种情况:

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

我没有投票决定关闭为重复,但这是显著类似http://stackoverflow.com/questions/941584 – 2011-01-19 14:39:58

+0

或许我应该解释为什么我没有找到答案到关于增加相关的现有问题。 此外,还有溢出的可能性,就像分配test2一样。我了解这些情况。然而,在我所概述的两种情况下,不存在溢出的可能性。 – 2011-01-19 14:50:13

回答