C语言无符号和有符号的区别
C语言定义一个int类型时,默认是有符号数,关键字signed常省略,如: int a; signed int a; signed a; 这三句是一样的定义 定义无符号数时,必须加关键字unsigned,如: unsigned int a ; unsigned a; 无符号关键字unsigned,只适用于int short long char四种变量,浮点型数据只有有符号类型。 那么为什么float会没有无符号呢?C语言中,整型是采用二进制表示的,而浮点数却是按照整数部分,小数部分,指数部分存放的。 运算也是分开来运算的。这样的做法,使得浮点数可以表示很大的范围,所以unsigned无法作用于float,定义无符号的浮点型会出错。不够的话,可以用double,双精度。 以32位机为例,int 分为无符号 unsigned 和有符号 signed 两种类型,默认为signed。二者的区别就是无符号类型能保存2倍于有符号类型的数据。 32位下,signed int 的表示范围为:-2147483648 ~ 2147483647 (最高位做符号位)。 unsigned int 的表示范围为:0 ~ 4294967295 (不保留符号位)。我们都知道,两个不同的数据类型在进行混合使用时,会自动进行类型转换。 其转换原则就是:向着精度更高、长度更长的方向转换。也就是我们平常见到的 char