短裤上的 C# 按位运算 - 为什么要转换为 int?

标签 c# syntax bitwise-operators implicit-conversion

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 本人在另一个答案中回答(即使问题完全不同)。

看看Integer summing blues, short += short problem

关于短裤上的 C# 按位运算 - 为什么要转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736444/

相关文章:

c# - ASP.net母版页/内容页简单设计问题

通用扩展方法的 C# 特化

c - #else 1 怎么只是一个警告?

bit-manipulation - 逻辑右移、算术右移、循环右移的区别

c++ - C++ 中逻辑 "or"对 bool 值的效率

c# - 具有非标准fmt标题的WAVE文件

c# - 如何教 User.IsInRole

javascript - Node 需要目录而不是特定文件

javascript - Mongoose 需要或不需要 { model, Schema } 吗?

c 从缓冲区读取 4 字节小端序号的代码