#include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 char a[1000];
6 int i;
7 for (i=0 ; i <1000; i++)
8 {
9 a[i] = -1-i;
14 }
15 printf ("%d\n", strlen(a));
16 return 0;
17 }
这段程序值得深入研究
首先,,测定数组长度用strlen函数,,,这个函数的要求是只能字符数组的长度,所以当你想判断整形数组的长度时就不能运用这个函数
2这里可以看到对字符数组赋值整数,,是强制类型转换,,,字符和整形是一直可以通用的
3也就是这个程序的本质:这个程序最后的输出是多少???
答案是255(在32位系统上)
-1,-2,,,,,-128,127,126,,,,1
这是正确的输出
这样的原因是:-1到-128,,,,,,127是char型表示的最大数,这时输出的值为-128,然后溢出char型最小整数为-128,输出为127这样一直类推到第255个数是1第266个数是0
这样字符数组结束的标志是“\0”就有了本程序的答案。。。
判断字符数组是否0为结束标志:
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 char a[10];
6 int i;
7 for (i=1; i<10; i++)
8 {
9 a[i] = i;
10 }
11 a[0] = 0;
12 printf ("%d\n", a[0]);
13 int w = strlen (a);
14 printf ("%d\n", w);
15 }
16
这样可以看到输出是0,0原因是字符数组的第一个字符是0故字符长度为0
******************************************************************************************************************************
根据以上讨论及程序实验发现+0和-0在内存中的表示方法是一样的,,,都是全部为0.
¥¥¥¥¥¥4¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
1 #include <stdio.h>
2 int main()
3 {
4 char f = 127;
5 f += 1;
6 printf ("%d\n", f);
7 f =128;
8 f += 1;
9 printf ("%d\n", f);
10 f = -127;
11 f -= 1;
12 printf ("%d\n", f);
13 f = -128;
14 f -= 1;
15 printf ("%d\n", f);
16 f = 127;
17 printf ("%d\n", (++f));
18 f = 127;
19 printf ("%d\n", f+1);
20 f = 127;
21 f = f+1;
22 printf ("%d\n", f);
23 }
24
这段程序中输出的结果可以看到在32位系统中char的表示范围是-128---127
但是在最后三次的输出中会比较出++f和f=f+1再输出都符合这样的规则,,,但是如果输出是printf ("%d\n", f+1);则会输出128
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1 #include <stdio.h>
2 int main ()
3 {
4 int i = -20;
5 unsigned j = 10;
6 int h;
7 h = i+j;
8 printf ("%d\n", h);
9 printf ("%u\n", h);
10 h = 4294967296;
11 printf ("%u\n", h);
12 h = 4294967295;
13 printf ("%u\n", h);
14 char c = 127;
15 printf ("%d\n", c);
16
17 }
这段程序中开始看的是输出的方式,,,如果以有符号整形输出-10正常,,,如果以无符号整形输出在32位系统中最大的是 4294967296这样加-10就4294967286
还可以看出:
当输出4294967296时输出的则是0 。。。。也就是无符号数最大输出4294967295
##############################################################################################
#include <stdio.h>
2 int main()
3 {
4 unsigned i;
5 for (i=9;i>=0;i--)
6 {
7 printf ("%u\n", i);
8 }
9 }
~
这段代码中到达4294967296后就是0,然后又出来逐渐递减。。。。。。。