关闭

char溢出

625人阅读 评论(0) 收藏 举报
分类:

学习链接: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了,还是死循环


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38741次
    • 积分:1511
    • 等级:
    • 排名:千里之外
    • 原创:99篇
    • 转载:1篇
    • 译文:0篇
    • 评论:4条