char溢出
學習鏈接: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了,還是死循環
總結
- 上一篇: 剖析递归求二叉树高
- 下一篇: C++中#if,#ifdef,ifnde