判断一个数字是不是有符号数字,以及一个类型是不是有符号类型

本文介绍了一个有趣的问题:如何通过宏定义来判断变量是有符号还是无符号,并提供了具体的代码实现及运行结果。

上课听老师说过这样一道题,感觉比较有趣,就记录下来了。

关键思路是一个既有无符号数字,又有有符号数字的表达式中,有符号数字会被转化成无符号数字

下面是代码:

#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类型是无符号的!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值