ImJ*_*mes 16 c# byte carryflag
当Byte溢出时实际发生了什么?
说我们有
byte byte1 = 150; // 10010110
byte byte2 = 199; // 11000111
Run Code Online (Sandbox Code Playgroud)
如果我们现在做这个添加
byte byte3 = byte1 + byte2;
Run Code Online (Sandbox Code Playgroud)
我想我们最终会得到byte3 = 94,但究竟发生了什么?我是否以某种方式覆盖了其他内存或者这完全无害?
在C#中,如果你有
checked { byte byte3 = byte1 + byte2; }
Run Code Online (Sandbox Code Playgroud)
它会抛出溢出异常.代码unchecked默认编译.正如其他答案所说,价值将"环绕".即byte3 = (byte1 + byte2) & 0xFF;
既然您已经标记了C#,C++和C的问题,我将回答有关C和C++的问题.在签名类型的c ++溢出中,包括sbyte(我相信,signed char在C/C++中)会导致未定义的行为.但是对于无符号类型,例如byte(unsigned char在C++中),结果取模2 n,其中n是无符号类型中的位数.在C#中,第二个规则成立,如果签名类型在checked块中,则会生成异常.我可能在C#部分错了.
溢出在 C# 中是无害的 - 你不会溢出内存 - 你只需得到结果的最后 8 位。如果您希望这是一个例外,请使用“checked”关键字。另请注意,您可能会发现 byte+byte 给出 int,因此您可能需要转换回 byte。
| 归档时间: |
|
| 查看次数: |
7963 次 |
| 最近记录: |