short BitwiseTest(short value)
{
short test1 = ((value >> 8) & 0xFF);
short test2 = unchecked((short)((value << 8) & 0xFF00));
return (test1 | test2);
}
上述代码是一个(低效的)例子,用于在C#中交换short(有符号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变量进行了赋值。