C语言中unsigned和signed在声明时有什么作用

int,float等几个都弄明了,就是这两个不明白是什么意思.求高手讲解.

1、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。

2、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据。

扩展资料:

unsigned和signed的区别

1、所有比int型小的数据类型(包括char,signed char,unsigned char,short,signed short,unsigned short)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsigned int型

2、bool型转化为int型时,false转化为0,true转换为1;反过来所有的整数类型转化为bool时,0转化为false,其它非零值都转为true

3、如果表达式中混有unsigned short和int型时,如果int型数据可以表示所有的unsigned short型的话,则将unsigned short类型的数据转换为int型,否则,unsigned short类型及int型都转换为unsigned int类型

举个例子,在32位机上int是32位,范围–2,147,483,648 to 2,147,483,647,unsigned short是16位,范围0 to 65,535,这样int型的足够表示unsigned short类型的数据,因此在混有这两者的运算中,unsigned short类型数据被转换为int型

4、unsigned int 与long类型的转换规律同3,在32位机上,unsigned int是32位,范围0 to 4,294,967,295,long是32位,范围–2,147,483,648 to 2,147,483,647,可见long类型不够表示所有的unsigned int型,因此在混有unsigned int及long的表达式中,两者都被转换为unsigned long

5、如果表达式中既有int 又有unsigned int,则所有的int数据都被转化为unsigned int类型

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-07
signed 和 unsigned 是C语言中的类型指示符(type specifier),signed 指示被声明的对象的类型为有符号整型(signed integer type),unsigned 指示被声明的对象的类型为无符号整型(unsigned integer type)。
除了用于 bit field,单独使用的 int 即指示有符号整型,此时 signed 没有实际意义,int 和 unsigned 一同使用时指示无符号整型。
char,signed char,unsigned char 是三个不同的类型(char 和另外两个之一的二进制表示方法相同,至于 char 具体是否有符号,通常可通过编译指令指定)。
对于 bit field, signed int 类型的 bit field 总是有符号的,unsigned int 类型的 bit field 总是无符号的,而单独使用的 int 是否表示有符号,由编译器定义。

无符号数的二进制表示(object representation)由两部分构成,即 value bits 和 padding bits,value bits 是一串二进制位,第 M 个 value bit 表示 2 的 M-1 次方,因此 N 个 value bits 加起来就可以表示 0 到 2 的 N 次方减一 这个范围内的所有整数。padding bits 不影响数的值(可能不存在 padding bit )。
有符号数的二进制表示(object representation)由三部分构成,即 sign bit,value bits 和 padding bits ,其中 sign bit 只有一位,这一位的值为 0 时表示这个数为正数,此时它不影响有符号数的值,value bits 的含义与无符号数中的 value bits 相同。sign bit 为 1 时表示这个数为负数,此时这个数可以使用原码、反码、补码 中的任何一种编码来表示数值。和无符号数一样,padding bits 不影响数的值(可能不存在 padding bit )。
例如,当某个无符号类型有 32 个value bits 时,它的第 1 个 value bit 表示 2 的 0 次方,第 2 个 value bit 表示 2 的 1 次方,……,第 32 个 value bit 表示 2 的 31 次方。当所有 value bits 都为 1 时,就表示 2 的 0 次方加 2 的 1 次方加……加 2 的 31 次方,即 2 的 32次方减一;当所有的 value bits 都为 0 时,就表示 0 ,这个无符号类型的取值范围就是 0 到 2 的 32 次方减一。
与之对应的有符号类型有 1 个sign bit 和 31 个 value bits,当 sign bit 为 0 时,可以表示 0 到 2 的 31 次方减一范围内的任何一个整数,如果使用补码,当 sign bit 为 1 时,可以看作 sign bit 的值是 2 的 31 次方 的相反数,因此当 sign bit 为 1 时 sign bit 加上 value bit 一共可以表示 2 的 31 次方 的相反数到 -1 范围内的任何一个整数,考虑所有情况,这个有符号类型的取值范围就是 2 的 31 次方 的相反数 到 2 的 32 次方减一。
第2个回答  2019-12-21
1、unsigned的作用就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。

2、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据。
第3个回答  2010-07-22
主要是取值范围。

unsigned和signed在一种类型下,unsigned表示在这个范围大小的整数,signed一般都是在这个范围内的从负到正

有什么不明白可以HI我 细聊本回答被提问者采纳
第4个回答  2010-07-22
简单说,unsigned是无符号类型,signed 是有符号类型。比如unsigned int 的取植范围从零开始,signed int 取植有负数。

不明白搜索百度百科 unsigned 就可以

参考资料:unsigned

相似回答