用于测试给定整数类型在C中是否有符号或无符号的宏?

可能重复:
用于测试整数类型是有符号还是无符号的宏

为了测试给定的整数类型是有符号还是无符号,我使用了以下宏:

#define IS_SIGNED(type) ((type)~0 < 0) int main() { if(IS_SIGNED(char)) cout<<"The char type is signed"<<endl; if(IS_SIGNED(unsigned char)) cout<<"The unsigned char type is signed"<<endl; } 

该程序将在使用二进制和一进制补码表示的实现中工作。 这个想法是当零是一个补码时,MSB将被设置为1.然后根据类型转换,结果将是正面的或负面的。

我想知道您对这个关于可移植性的宏定义的看法?

固定版本:

 #define IS_SIGNED(type) ((type)-1 < 0) 

原始版本只是使用~0作为写入-1的不良方式,但它只适用于二进制补码实现。 (它也恰好在符号量级实现上工作,但失败甚至可能在补充系统上崩溃。)