转自《c语言深度解剖》
我们知道计算机底层只认识 0、1.任何数据到了底层都会变计算转换成 0、1.那负数怎么 存储呢?肯定这个“-”号是无法存入内存的,怎么办?
很好办,做个标记。把基本数据类型的最高位腾出来,用来存符号,同时约定如下:最高位如果是 1,表明这个数是负数,其 值为除最高位以外的剩余位的值添上这个“-”号;如果最高位是 0,表明这个数是正数, 其值为除最高位以外的剩余位的值。
这样的话,一个
32
位的
signed int
类型整数其值表示法范围为:
-
2的31次方
~
2的31次方
-1
;
8
位的
char
类型数其值表示的范围为
-
2的7次方
~
2的7次方
-1
。
一个
32
位的
unsigned int
类型整数其值表示法范围为:0
~
2的32次方
-1
;
8
位的
char
类型数其值表示的范围为
0
~
2的8次方
-1。
可以看成一个循环。
#include <stdio.h>
#include <string.h>
int main() {
char a[1000];
int i;
for (i = 0; i < 1000; ++i) {
a[i] = -1 - i;
}
printf("%d", strlen(a));
return 0;
}
数组从 -1 到 -128 再到 127 到 1,然后到 0,字符串结束标记,所以有效长度为 128 + 127 = 255