signed 和 unsigned 类型说明符
目录
一、基本概念
二、int 类型的符号性
三、unsigned int 类型
优势
四、标准库中的定义
五、char 类型的特殊性
六、注意事项
一、基本概念
在C语言中,signed
和unsigned
是用于修饰字符型和整型类型的关键字:
-
signed
表示该类型带有正负号,可以表示负值、零和正值 -
unsigned
表示该类型不带有正负号,只能表示零和正整数
二、int 类型的符号性
对于int
类型:
-
默认是带符号的,即
int
等同于signed int
-
由于是默认情况,
signed
关键字通常可以省略
signed int a; // 等同于
int a; // 这种形式更常见
三、unsigned int 类型
int
类型也可以声明为不带符号:
unsigned int a;
或者简写为(int
可以省略):
unsigned a;
优势
使用unsigned
的主要优势:
-
相同长度的内存能够表示的最大整数值增大了一倍
-
例如:
-
16位
signed short int
范围:-32,768 ~ 32,767 -
16位
unsigned short int
范围:0 ~ 65,535 -
32位
signed int
范围:-2,147,483,648 ~ 2,147,483,647 -
32位
unsigned int
范围:0 ~ 4,294,967,295
-
四、标准库中的定义
在limits.h
头文件中定义了这些类型的极限值(以VS2022为例):
#define SHRT_MIN (-32768) // 有符号16位整型的最小值
#define SHRT_MAX 32767 // 有符号16位整型的最大值
#define USHRT_MAX 0xffff // 无符号16位整型的最大值
#define INT_MIN (-2147483647 - 1) // 有符号整型的最小值
#define INT_MAX 2147483647 // 有符号整型的最大值
五、char 类型的特殊性
字符类型char
也可以使用signed
和unsigned
修饰:
signed char c; // 范围通常为-128到127
unsigned char c; // 范围通常为0到255
与int
不同,C语言规定:
-
char
类型默认是否带符号由实现定义(编译器决定) -
char
不等同于signed char
,它可能是signed char
也可能是unsigned char
-
这种特性是
char
类型特有的,int
总是等同于signed int
六、注意事项
在实际编程中应注意:
-
当确定变量不会存储负值时,使用
unsigned
可以扩大正数表示范围 -
混合使用
signed
和unsigned
类型可能导致意外的类型转换和结果 -
在需要明确符号性的场合,最好显式声明
signed
或unsigned