【发布时间】:2011-06-11 19:24:32
【问题描述】:
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 变量。
【问题讨论】:
-
我没有投票关闭作为重复,但这与stackoverflow.com/questions/941584非常相似
-
也许我应该解释一下为什么我找不到有关加法相关的现有问题的答案。加法有溢出的可能性,就像 test2 的赋值一样。我理解那些情况。但是,在我概述的两种情况下,没有溢出的可能性。
标签: c# syntax bitwise-operators implicit-conversion