关于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本回答被提问者采纳
相似回答