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变量。
我没有投票决定关闭为重复,但这是显著类似http://stackoverflow.com/questions/941584 – 2011-01-19 14:39:58
或许我应该解释为什么我没有找到答案到关于增加相关的现有问题。 此外,还有溢出的可能性,就像分配test2一样。我了解这些情况。然而,在我所概述的两种情况下,不存在溢出的可能性。 – 2011-01-19 14:50:13