您的位置:首页 > 其它

判断类型是无符号类型还是有符号类型

2011-12-29 14:48 162 查看
#include <stdio.h>

// (1)数值以补码的形式存储在计算机内,无论无符号数还是有符合号数。

// (2)-1的存储形式为***001,若为有符号数类型,则小于;若为无符号数类型,则大于.

// (3)无符号数的最高位为数值,不是符号位,因此不会是负数。

// (4)要考虑类型提升问题。

#define ISUNSIGNED_TYPE(type) ((type)-1 > 0)

#define ISUNSIGNED_VAR(a) (a >= 0 && ~a >= 0)

// 判断变量a的原始类型是否为无符号的,防止类型提升

#define ISUNSIGNED(type,a) ( (type)a >= (type)0 && (type)~a >= (type)0 )

int main(void)

{

unsigned char b = 7;

if (ISUNSIGNED_TYPE(unsigned char))

{

printf("无符号类型!\n");

}

else

{

printf("有符号类型!\n"); // 输出

}

if (ISUNSIGNED_VAR(b))

{

printf("无符号数!\n"); // 输出(因类型提升)

}

else

{

printf("有符号数!\n");

}

printf("-----------------\n");

if (ISUNSIGNED(unsigned char, b))

{

printf("无符号数!\n");

}

else

{

printf("有符号数!\n"); // 输出

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: