整数溢出会影响其他变量吗?

does integer overflow affects other variable?

#include <iostream>
using namespace std;

int main() {
    unsigned char char_values[2] = {0, 255};
    char_values[1] += 1;
    cout << (int)char_values[0] << endl;
    cout << (int)char_values[1] << endl;
    return 0;
}

关于这段代码,我预计:

1
0

因为十进制的255二进制是1111 1111,十进制的255 + 1二进制是1 0000 0000。所以我认为 char[0] 会因为溢出而受到 char[1] 的影响,但结果是:

0
0

溢出是否影响其他变量?

如果像 unsigned char 这样的无符号整数类型溢出,那么结果是 "truncated" 到该数据类型提供的位(实际上它是根据模 MAX_XXX+1 定义的XXX 是相应的数据类型)。所以对 "overflowing" 对象之前或之后的变量/内存没有影响;并且 255+1256,并且 256 被截断为较低的有效 8 位得到 0.

请注意,有符号整数类型的溢出行为完全不同,即它是未定义的行为。