学习链接:http://zhidao.baidu.com/link?url=uCJPW3GPedxRYJnI84dk9mqAWKzBQ-h6Uq1H5GqwNlgSNorqXi2qNGD7OnIFOpGZn2Kcc6xFmfZkAjMcEkK_e_
说明:代码来自<<程序员面试宝典>>
#define MAX 255
#include<iostream>
using namespace std;
int main()
{
char p[MAX+1];
char ch;
for(ch=0;ch<=MAX;ch++)
{
p[ch]=ch;
}
return 0;
}
程序错误,程序进入死循环。
下面来说明一下:
char是有符号的,char在-128~127之间。当ch=128时,就越界了,然后就变成了-128.
当ch=127时,ch的二进制为 0111 1111,其中第一位是用来表示符号的。如果+1,则符号为变为1.这是这个二进制变成补码了,而它的源码是-128.所以说有符号的char是不能表示128的。这样ch永远<=MAX,因为到了128就变为负数,程序死循环。
char变为unsigned char时,当ch=255时,对应二进制为1111 1111,这时+1,则全部变为0了,还是死循环