#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;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我预计:
1
0
Run Code Online (Sandbox Code Playgroud)
因为十进制中的255是二进制中的1111 1111而十进制中的255 + 1是二进制中的1 0000 0000.所以我认为因为溢出char[0]会受到影响,char[1]但结果是:
0
0
Run Code Online (Sandbox Code Playgroud)
溢出会影响其他变量吗?
如果无符号整数类型如unsigned char溢出,则结果被"截断"为该数据类型提供的位(实际上它是以模数的形式定义的,MAX_XXX+1其中XXX是相应的数据类型).因此,在"溢出"对象之前或之后对变量/内存没有影响; 并且255+1是256,并256截断为下显著8位给出0.
请注意,有符号整数类型的溢出行为完全不同,即它是未定义的行为.