超过其限制时添加两个字节的结果

Dr.*_*len 0 c#

让我有两个字节变量:

byte a= 255;
byte b= 121;

byte c= (byte) (a + b);

Console.WriteLine(c.ToString());
Run Code Online (Sandbox Code Playgroud)

输出:120

请解释一下这是如何增加价值的.我知道它的跨越大小的字节限制,但不知道它在这种情况下执行的确切操作,因为它看起来不像它的结果.

谢谢

编辑:对不起它的120作为答案.

Dar*_*rov 7

你溢出255的字节存储,所以它从0开始.

所以:a + b是整数= 376

您的代码相当于:

byte c = (byte)376;
Run Code Online (Sandbox Code Playgroud)

这是添加两个字节返回整数的原因之一.将其转换回字节应该由您自己承担风险.

如果要将整数376存储为字节,则需要一个数组:

byte[] buffer = BitConverter.GetBytes(376);
Run Code Online (Sandbox Code Playgroud)

如您所见,结果数组现在包含4个字节,这是存储32位整数所必需的.


Dir*_*mar 5

当您查看值的二进制表示形式时,这一点就变得显而易见:

var | decimal | binary
----|----------------------
  a |     255 |   1111 1111
  b |     121 |   0111 1001
    |         |
a+b |     376 | 1 0111 1000
Run Code Online (Sandbox Code Playgroud)

这被截断为 8 位,将结果转换为时忽略溢出位byte

  c |         |   0111 1000 => 120
Run Code Online (Sandbox Code Playgroud)