让我有两个字节变量:
byte a= 255;
byte b= 121;
byte c= (byte) (a + b);
Console.WriteLine(c.ToString());
Run Code Online (Sandbox Code Playgroud)
输出:120
请解释一下这是如何增加价值的.我知道它的跨越大小的字节限制,但不知道它在这种情况下执行的确切操作,因为它看起来不像它的结果.
谢谢
编辑:对不起它的120作为答案.
你溢出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位整数所必需的.
当您查看值的二进制表示形式时,这一点就变得显而易见:
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)
| 归档时间: |
|
| 查看次数: |
2931 次 |
| 最近记录: |