整型有无符号(un
signed)和有符号(signed)两种类型,在默认情况下声明的
整型变量都是有符号的类型(
char有点特别),如果需声明无符号类型的话就需要在类型前加上
unsigned。无符号整型和有符号整型的区别就是无符号类型可以存放的
正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。在一些不可能取值为负数的时候,可以定义为unsigned,在一些底层的
嵌入式编程的数据一般都是无符号的。
无符号数只表示大小,
有符号数最高位(
二进制情况下最高位表示符号位),在同一操作系统下,有符号数和无符号数的最大数值在大小上的关系是2*x+1(x表示有符号数的
最大值,2*x+1表示无符号数最大值)。二者表示的数据范围大小是相同的,但是范围不同。
无符号整型和有符号整型运算依据表示数据的最大值来定(也是计算机中混合
数据类型运算的特点,两个不同类型
数据运算,会取能表示较大数据的类型作为运算类型),二者数据运算先将有符号整型转换成无符号整型再通过无符号数运算规则来计算。数据如果超出了整型
数据表示范围,则用比当前数据类型大的最小数据类型来表示。
在对应的
带符号整型前面加上unsigned,也就是
unsigned int、unsigned
short、unsigned
long、unsigned long long。其中unsigned int可以直接写为unsigned。 无符号整型不能存储负数,但存储的最大值可以扩大一倍,例如unsigned的范围就是0~232-1。