关于C语言中有符号型signed和无符号型unsigned的区别

实在不明白教材说什么,这两个东东空间有什么不同,不要说得太高深,我只是初学者.

1、表达数值范围的不同

signed表示有符号的,其第一个位表示正负,其余位表示大小,例如signedint大小区间为-128~127。

unsigned表示无符号的,所有位都为大小,没有正负,例如unsignedint大小区间为0~127。

2、类型的不同

signed类型的整数,只用了去除最高位,剩下的15位来进行编码的,而最高位只是用来做标记(sign),标记整数的正负,0表示正,1表示负。所以对于signed的整数,的存储范围是(-2^15to2^15-1),也就是-32768到+32767的整数。

而对于unsigned的整数,其16位全部用来编码,存储范围便是(0to2^16-1),即0到65535的非负整数。所以呢你可以声明inta=1,或者inta=-1,但是不可以声明unsigneda=-1。但是需要提到的一点是,不管整数的类型是signed还是unsigned,都用了16位来存储,也就是说16位全部用来存储数据。

3、表达的数值不同

signed类型的整数只用了除去最高位剩余的15为进行编码,最高位用来标记整数的正负,0表示正,1表示负。所以对signed的整数存储范围为(-2^15~2^15-1)。

unsigned类型的整数其16为全部用来编码,则unsigned的整数存储范围为(0~2^16-1)。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-21

C语言中有符号型signed和无符号型unsigned的区别为:符号位不同、正数范围不同、转换不同。

一、符号位不同

1、有符号型signed:有符号型signed由于有符号位,故能表示负数。

2、无符号型unsigned:无符号型unsigned由于省去了符号位,故不能表示负数。

二、正数范围不同

1、有符号型signed:表示同一数字类型,有符号型signed由于有符号位,正数范围比无符号型unsigned小。

2、无符号型unsigned:表示同一数字类型,无符号型unsigned由于省去了符号位,正数范围比无符号型unsigned大。

三、转换不同

1、有符号型signed:正数有符号型signed能转换为无符号型unsigned,负数有符号型signed不能转换为无符号型unsigned。

2、无符号型unsigned:无符号型unsigned能转换为有符号型unsigned。

本回答被网友采纳
第2个回答  2019-11-21

1、数值占位不同

unsignedint是从0到2的32次方减1,而signedint是从负2的31次方到正2的31次方减1。在计算机里,整型变量占用4字节,也就是32位的存储空间。对于有符号数来说,正负号要单独占一位。所以除去符号位以外,数的绝对值就占31位。

2、范围的不同

无符号整型和有符号整型的区别在于无符号类型可以存放的正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。

在16位系统中一个int能存储数据的范围是-32768~32767,unsigned能存储的数据范围是0~65535。

3、表示的绝对值不同

它们所占的字节数其实是一样的,但是有符号的需要安排一个位置来表达我这个数值的符号,因此说它能表示的绝对值就要比无符号的少一半。

举个例子:有一个1个1字节的整数,那么无符号的就是:“00000000~11111111”这个就是无符号的范围。

本回答被网友采纳
第3个回答  2010-07-10
各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同,但由于省去了符号,故不能表示负数。
例如:有符号整形变量最大是32767,无符号整形变量最大是65535。
第4个回答  推荐于2017-11-28
就拿short型来说吧
signed short型的表示范围是-32768~32767中的整数
而unsigned short型的表示范围是0~65535中的整数
也就是说,signed型能够表示负数,而unsigned则不能,但signed表示的最大数总要比unsigned小,其原因是因为在内存中signed需要用1位(short型共有16位)来存储正负号,unsigned型没有正负号,所以这1位也就节省了下来和其它位一起表示整数了。
int型、long型同理
如果要运算的数存在负数的可能,那么一定要用signed。如果不存在负数,且要求存储的数据范围尽可能大,则一般用unsigned型。
如果声明变量时不指明signed还是unsigned,则默认为signed本回答被提问者采纳

关于c语言中有符号型signed和无符号型unsigned的区别
在C语言中,signed和unsigned是用于声明整数类型的修饰符。它们的区别在于如何处理数值的正负性以及所能表示的数值范围。二、详细解释:1. signed类型:signed关键字表示该整数类型可以表示正数、负数以及零。例如,在声明一个signed int类型的变量时,该变量可以存储从负的最大整数值到正的最大整数值之间的...

关于C语言中有符号型signed和无符号型unsigned的区别
1、表达数值范围的不同 signed表示有符号的,其第一个位表示正负,其余位表示大小,例如signedint大小区间为-128~127。unsigned表示无符号的,所有位都为大小,没有正负,例如unsignedint大小区间为0~127。2、类型的不同 signed类型的整数,只用了去除最高位,剩下的15位来进行编码的,而最高位只是用...

C语言丨关键字signed和unsigned 的使用与区别详解
C语言中的signed和unsigned关键字用于区分整数变量的符号类型,signed表示有符号,而unsigned则表示无符号。这两者在数据存储和处理上有着显著的不同。Signed(有符号)Signed关键字用于声明有符号整数,如int、short和long等。默认情况下,这些类型都是有符号的,无需额外标注。signed的作用在于明确变量可以存...

c语言中signed 和unsigned是什么意思
1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数。2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负。3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用来存储符号,这一位不能表示数值。一般来说,同类型的signed能够存储的数的绝...

c语言中unsigned和signed在声明时有什么作用
在C语言中,`unsigned`和`signed`用于声明整数的符号属性。`unsigned`表示无符号整数,只能表示非负整数;而`signed`表示有符号整数,可以表示正数、零和负数。1. unsigned的作用:当我们在C语言中声明一个整数变量时,默认情况下这个变量是有符号的。但如果我们想要这个整数变量只能存储非负数值,这时就...

signed和unsigned有什么区别
signed是默认的 表示 这个变量 是有符号的 也就是可以存储 整数 和负数 unsigned则需要 显示给出 表示 这个变量 没有符号 值能存储数的大小 而不能表示 正负 另外 signed存储 符号是有代价的 代价就是 存储空间中的一个比特位 专门用来存储符号 这一位不能表示数值 所以 一般来说 同类型的signed...

unsigned在c语言中
结论:在C语言中,整数类型分为有符号(signed)和无符号(unsigned)两种,尽管它们在表示范围上有所区别。无符号类型默认情况下并非默认声明,需要通过在类型前添加"unsigned"来指定,这样可以存储的数据范围通常会是有符号类型两倍。例如,在16位系统中,有符号int的范围是-32768到32767,而unsigned int则...

unsignedchar和signedchar区别
1. 数值范围的不同:unsigned char:用于存储无符号字符,即只能表示正数和零。其取值范围从0到255。signed char:用于存储有符号字符,可以表示正数、零和负数。其取值范围通常是从-128到127,但具体取决于编译器和系统的实现,可能会有些许差异。2. 符号表示:在内存中,unsigned char不存储符号信息,...

在C语言中长度相同的有符号与无符号整型数间,原样赋值时为什么值不同...
在c语言中无符号(unsigned)和有符号(signed),数据范围不同,无符号和有符号的区别就是有符号类型需要使用一个bit来表示数字的正负,从而导致负数或者超过signed int数据范围时,在两者中的表示值不同,示例代码如下,include <stdio.h> int main(int argc, char *argv[]){ unsigned a;int b=-...

C语言中char类型中的有符号与无符号的区别和意义?
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别。首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,unsigned char没有符号位,因此能表示0~255,这个好理解,8个...

相似回答