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)。
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。
本回答被网友采纳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”这个就是无符号的范围。
本回答被网友采纳