例一:
#include<stdio.h>
int main()
{
/* *///
char a = -1;
signed char b = -1;
unsigned char c = -1;
printf("a=%d,c%d,c=%d", a, b, c);
return 0;
}
输出为:
char 类型的a,b,c只占八个字节,会发生截断,所以只放8个字节的字符
当把a,b,c要变成整型变量被打印出来时,会发生整型提升
例二:
#include<stdio.h>
int main()
{
char a = -128;
printf("%u", a);
return 0;
}
例三:
#include<stdio.h>
int main()
{
int i = -20;
unsigned int j = 10;
printf("%d\n", i + j);
return 0;
}
-20源码:10000000000000000000000000010100
-20烦码:111111111111111111111111111111101011
-20补码:111111111111111111111111111111101101
10补码:00000000000000000000000000001010
-20+10补码相加:111111111111111111111111111111110110
源码:10000000000000000000000000001010(十进制-10)
例四:
#include<stdio.h>
#include<windows.h>
int main()
{
unsigned int i;
for(i = 9; i >= 0; i--)
{
printf("%u\n", i );
Sleep(1000);
}
return 0;
}
当循环运行到i=0时;i--,-1后被放入一个无符号整型中,符号位被忽略读出的十进制数为4294967295,大于0进入新的循环,以此类推,i永远大于0,循环无法停止
例五:
#include<stdio.h>
int main()
{
char a[1000];
int i;
for (i = 0; i <= 1000; i++)
{
a[i] = -1 - i;
}
printf("%d\n", strlen(a));
return 0;
}