signed和unsigned用于修饰整数类型(包括char,从ANSI C89标准开始支持)。
- signed表示有符号,unsigned表示无符号。
-
有符号数的最大取值要比无符号的小约一半,因为有符号数的最高一位被用来表示符号。
-
默认的int、short、long、long long为有符号数;换言之,int等价于signed int,short等价于signed short,long等价于signed long,long long等价于signed long long。
-
但是char本身是signed char还是unsigned char,取决于语言的实现(编译器)。
数据类型范围列表如下:
- signed char : [-2^7, 2^7) 即 [-128, 128)
- unsigned char:[0, 2^8) 即 [0, 256)
- signed n位整数:[-2^(n-1), 2^(n-1))
- unsigned n位整数:[0, 2^n)
注意:
整数类型占多少字节空间是不确定的,只能保证sizeof(short) <= sizeof(int) <= sizeof(long)。
在32位的设备平台上,short为16位(2字节), int为32位(4字节),long为32位(4字节),long long为64位(8字节)。
在64位的设备平台上,short为16位(2字节), int为32位(4字节),long为64位(8字节),long long为64位(8字节)。