分类: C/C++
2010-12-24 15:44:06
问:一个int型变量的最大允许值为32767,如果在加1,会出现什么情况?
答:第一步:32767的二进制表示为0111 1111 1111 1111
第二步:0111 1111 1111 1111加1为1000 0000 0000 0000
第三步:由于是有符号的int,而二进制的最高位是1,因此被认为是存储的负数
第四步:负数是以补码的形式存储的,而负数的补码计算方式是先对x取绝对值,再取反,再加1
第五步:按照求补码的步骤反过去计算1000 0000 0000 0000对应的正数,1000 0000 0000 0000减1得0111 1111 1111 1111 1111,在取反得 1000 0000 0000 0000,而1000 0000 0000 0000对应的正数为32768,而最原始的1000 0000 0000 0000是表示的负数,因此int型变量的最大允许值为32767,如果在加1将造成溢出,最后相加的结果为-32768.
同理可以推出当char 的最大值为127时,加1后出现的结果