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 来达到预期的结果?像这样:
short BitwiseTest2(short value)
{
short test1 = (short)((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return ((short)(test1 | test2));
}
如果不是为什么不呢?
请注意,我确实理解为什么 C# 在执行左位移位时将 short 转换为整数,因此分配了 test2 变量。
最佳答案
这基本上由 Eric Lippert 本人在另一个答案中回答(即使问题完全不同)。
关于短裤上的 C# 按位运算 - 为什么要转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736444/