【发布时间】:2010-11-11 16:56:14
【问题描述】:
当字节溢出时实际发生了什么?
说我们有
byte byte1 = 150; // 10010110
byte byte2 = 199; // 11000111
如果我们现在做这个添加
byte byte3 = byte1 + byte2;
我认为我们最终会得到 byte3 = 94 但实际上会发生什么?我是否以某种方式覆盖了其他一些记忆,或者这完全无害?
【问题讨论】:
-
删除了 C 和 C++ 标签,因为 A. C 和 C++ 没有“字节”数据类型,并且 B. 根据标准,这是未定义的行为。
-
@Billy 在 C 和 C++ 中有等价物
-
此代码无法编译。当你修复它时,运行时发生的事情也会变得很清楚。这是假设您的 [c#] 标签是准确的。
-
@Armen:是的,但是在 C 和 C++ 中,结果不是“93”,而是“未定义的行为”。因此,违反了问题的基本原则。 @ImJames:你没有让任何人不高兴。我只是不想让你在有人过来摘下标签时不高兴;)
-
@Steve:我不知道其他领域,但是任何曾经在 C 中从事通信编程的人 typedef 将一个字节作为无符号 8 位值比您说“编译”要快。