最近对于有符号整型与无符号整型,感觉很是头疼,都不知道怎么一回事。先看例子
#include<stdio.h>
int main(void)
{
unsigned a=2;
int b=-3;
int c;
unsigned d;
c=a+b; //a是无符号整型,b是有符号整型,b先转为无符号整型,然后运算成无符号整型,然后再强制类型转换成符号整型。
d=a+b;
if(a>b)printf("a>b");else printf("a<b");
printf("/n");
if(a-b>0)printf("a>b");else printf("a<b");
printf("/n");
if((b/a)>0.0)printf("b/a>0");else printf("b/a<0");
printf("/n");
if((b%a)>0.0)printf("b-a>0");else printf("b-a<0");
printf("/n");
printf("%d/n",c);
printf("%u/n",c);
printf("%d/n",d);
printf("%u/n",d);
getchar();
}
输出的答案是:a<b,a<b,>0,>0,-1,4294967295,-1,4294967295
问题1
无符号整型与有符号整型算术运算时,怎样转换?
问题2
无符号整型与有符号整型逻辑运算时,怎样转换?
问题3
printf()中的%d,%u是什么机制?