pan-ma的博客

不要去问问题,养成独立思考的习惯;问问题会让你丧失自己思考的习惯

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了,还是死循环


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ma2595162349/article/details/51550095
个人分类: C/C++ 面试题
上一篇剖析递归求二叉树高
下一篇C++中#if,#ifdef,ifndef
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭