上课听老师说过这样一道题,感觉比较有趣,就记录下来了。
关键思路是一个既有无符号数字,又有有符号数字的表达式中,有符号数字会被转化成无符号数字
下面是代码:
#include<stdio.h>
#define IS_SIGNED_NUMBER(a) (-1-a)<0
#define IS_SIGNED_TYPE(type) ((type)0 - 1)<0
int main(void)
{
int a=1;
unsigned b=1;
if(IS_SIGNED_NUMBER(a))
printf("int a的a是有符号的!\n");
else
printf("int a的a是无符号的!\n");
if(IS_SIGNED_NUMBER(b))
printf("unsigned b的b是有符号的!\n");
else
printf("unsigned b的b是无符号的!\n");
if(IS_SIGNED_TYPE(char))
printf("char类型是有符号的!\n");
else
printf("char类型是无符号的!\n");
if(IS_SIGNED_TYPE(unsigned))
printf("unsigned类型是有符号的!\n");
else
printf("unsigned类型是无符号的!\n");
return 0;
}
运行结果:
int a的a是有符号的!
unsigned b的b是无符号的!
char类型是有符号的!
unsigned类型是无符号的!