用于测试给定整数类型在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
的不良方式,但它只适用于二进制补码实现。 (它也恰好在符号量级实现上工作,但失败甚至可能在补充系统上崩溃。)