最近对于有符号整型与无符号整型,感觉很是头疼,都不知道怎么一回事。先看例子
#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是什么机制?
本文通过一个C语言示例探讨了有符号整型与无符号整型在算术和逻辑运算中的转换规则,并解释了printf函数中%d与%u格式符的区别。

1024

被折叠的 条评论
为什么被折叠?



