C#:将负整数转换为字节的结果

标签 c#

我正在查看 a project 的源代码,我注意到以下 statement (keyByte 和 codedByte 都是 byte 类型):

return (byte)(keyByte - codedByte);

我现在正在尝试了解在 keyByte 小于 codedByte 的情况下结果会是什么,这会导致负整数。

经过一些实验来了解转换一个值在 [-255 : -1] 范围内的负整数的结果后,我得到了以下结果:

byte result = (byte) (-6);  // result = 250
byte result = (byte) (-50); // result = 206
byte result = (byte) (-17); // result = 239
byte result = (byte) (-20); // result = 236

所以,前提是 -256 < a < 0 ,我能够通过以下方式确定结果:

result = 256 + a;

我的问题是:我是否应该一直期待这种情况?

最佳答案

是的,情况总是如此(即它不仅取决于您的环境或编译器,而且被定义为 C# 语言规范的一部分)。参见 http://msdn.microsoft.com/en-us/library/aa691349(v=vs.71).aspx :

In an unchecked context, the result is truncated by discarding any high-order bits that do not fit in the destination type.

下一个问题是,如果你把-256 到-1 之间的一个负值int 的高位去掉,作为一个字节读取,你会得到什么?这是您已经通过实验发现的:它是 256 + x。

请注意,字节顺序并不重要,因为我们要丢弃高阶(或最高有效)位,而不是“前”24 位。因此,无论我们从哪一端获取它,我们都会留下构成该 int 的最低有效字节。

关于C#:将负整数转换为字节的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574799/

相关文章:

c# - 将类的属性作为参数传递?

c# - 使用 LINQ 按值过滤字典时遇到麻烦

c# - 如何不将面板控件呈现为 <div>

c# - 如何以编程方式在 Windows 8.1 中 ScrollView ?

c# - 如何从 C# 正确关闭 java 应用程序

c# - 在 LINQ 语句中的调用中使用 out 变量是否安全?

c# - 在 Resharper 文件结构窗口中查看基本类型的成员?

c# - 进行多个 rest api 调用并使用 c# 组合结果

c# - 在 .NET C# 中存储加密 key 的最佳方式

c# - 创建声音循环