【问题标题】:C# Bitwise Operations on shorts - Why cast to an int?短裤上的 C# 按位运算 - 为什么要转换为 int?
【发布时间】: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


【解决方案1】:

这基本上是由 Eric Lippert 本人在另一个答案(即使问题完全不同)中回答的。

看看Integer summing blues, short += short problem

【讨论】:

  • 这个问题根本不一样,也没有被标记为已回答。
  • @Benjamin:仅供参考,原始提问者没有选择接受答案的事实并不意味着它没有被回答。很多人似乎从来没有解决过它,或者明白他们应该这样做。您通常可以通过从社区收到的投票数来更多地了解特定答案的质量,而不是通过它是否被接受。
  • 该答案的重要部分是它讨论了所有以 int 结尾的短操作。正如我所说,问题不同,但答案基本相同。那个短 短等于 int。
  • @Cody Gray:这是一个非常有效的观点。我应该详细说明,在引用的问题中提出的答案背后给出的推理不适用于此处。
  • @Benjamin - 顺便说一句,如果“甚至完全不同”==“完全不同”,那么我想我们已经达成协议;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 2013-12-16
  • 2014-08-13
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多