清霜一梦

outof_size

0
阅读(795)

//date 2013 4 1
//designer pengxiaoen
//function : when the + or - out of their size ,the value is.............
//--------------------------------------------------------------------------------

#include "stdio.h"
int main ()
{
int i,j;
char positive_number,negative_number; // 8 bit

positive_number =0;
negative_number =0;

for (i=0;i<135;i++)
{
if (i>125) printf ("positive_number = %d\n",positive_number);
positive_number +=1;
}


printf ("\n\n");


for (j=0;j>-135;j--)
{
if (j<-125) printf ("negative_number = %d\n",negative_number);
negative_number -=1;
}

system ("pause");

}

value:

对于positive_number 127 = 0111 1111 B

  0111 1111 B + 1 = 1000 0000 当成了补码就成了 -128

1000 0000 + 1 = 1000 0001 补 = -127 依次类推

对于negative_number -128 = 1000 0000 B

  1000 0000 - 1 = 0111 1111 = 127

  依次类推

小插曲:在定义时不小心将j 定义成了unsigned int 类型。第二个for 就不执行了。注意我说的是

for (j=0;j>-135;j--)
{ printf(“node/n”);
if (j<-125) printf ("negative_number = %d\n",negative_number);
negative_number -=1;
}

中的 printf(“node/n”); 这条语句一次都没有执行。

因为j 是unsigned int 类型,-135 补码形式存储后,这个二进制数连同符号位一起当成了一个unsigned int,所以纯粹以二级制看 [0]原码 < [-135]补码,j>-135条件就不成立 了,以至于这个for 语句里面的子语句一条都没有执行。


Baidu
map