例1:
#include<stdio.h>
int main()
{
unsigned int a=-4;
printf("%u",a);
}
运行结果:4294967292
要点:运行结果为2^32-4,“%u”为无符号占位符。
例2:
#include<stdio.h>
int main()
{
unsigned int a=-10;
int b=6;
printf("%u",a+b);
}
运行结果:4294967292
要点:运行结果为2^32-4,若将“%u”换为"%d",则运行结果为-4,“%d”为有符号占位符。
例3:
#include<stdio.h>
int main()
{
int a=-2;
unsigned int b=1;
if((a+b)>0)
printf("1\t");
else
printf("0\t");
printf("%d\t",a+b);
printf("%u",a+b);
}
运行结果:1 -1 4294967295
要点:(1)unsigned int 与int相比精度更高,运算时转换为高精度的,故-2转换为2^32-2,则a+b>0,所以运算结果为1
(2)“%d”为有符号运算符,a+b=-2+1=-1,即打印出-1
(3)“%u”为无符号运算符,a+b=-1,结果为2^32-1=4294967295
例4:
#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\n",strlen(a));
printf("%d\n",a[i]);
printf("%d\n",i);
}
运行结果:255
-24
1000
要点:(1)char的表示范围(0,255),超出这个范围即溢出,故a的字长为255
(2)虽说溢出,但i的计算继续,直到1000停止,故i运行结果为1000
例5:
#include<stdio.h>
int main()
{
int a,b;
scanf("%d,%d",&a,&b);
printf("%d",a+b);
}
运行结果:34(自己输入)
是不确定的数值
3,4
7
要点:(1)若将scanf中的内容换为("%d\n%d",&a,&b),则运行结果为:3
4
7
(2)scanf与printf同为#include<stdio.h>的库函数,由上述操作可得,scanf为严格按照格式的库函数
例6:
#include<stdio.h>
int main()
{
int a=0;
if(a=1)
printf("=0\n");
else
printf("idiot");
}
运行结果:=0
要点:(1)if中的a=1,“=”为赋值运算符,此时a必定为1,无论开始int a=何值,都会输出“=0”
(2)正确应为if(a==1),运行结果为idiot
(3)推荐改为if(1==a),运行结果为idiot,若少打了一个等号,程序会出错,容易查错