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

作者&投稿:保冒 (若有异议请与网页底部的电邮联系)
C语言中有符号整型和无符号整型的区别~

有符号:用最高为来表示符号位

1表示负,0表示正
无符号:全部用来表示实际数。
两者的取值范围不同
有符号整型为
-32768

32767
无符号整型

0

65535

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、表达数值范围的不同

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”这个就是无符号的范围。



各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同,但由于省去了符号,故不能表示负数。
例如:有符号整形变量最大是32767,无符号整形变量最大是65535。

就拿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 int, 简写为int时效果相同,因为C语言默认为有符号数。有符号短整型,写作signed short, 简写为short。在16位编译器下,int和short都是占2个字节,值域为-32768~+32767。这时二者没有区别。在32位和64位编译器下,二者是有区别的:1 占空间不同。sizeof(int) = 4, size...

C语言中unsigned和signed在声明时有什么作用
尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。2、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据。

单片机(C语言编程)中:char 和uchar有什么区别?
char有符号型型变量 全称为signed char 一般缩写为char 范围是-128~127 uchar 在C语言中不存在,会出现语法错误。unsigned char 是无符号型变量 范围是 0~255 但大家为了书写简单,大家都做如下定义:这时候Uchar或uchar就可以当无符号型字符变量使用了 typedef unsigned char Uchar;typedef ...

c语言简单数据类型有哪些?
C语言的基本数据类型为:整型、字符型、实数型。这些类型按其在计算机中的存储方式可被分为两个系列,即整数(integer)类型和浮点数(floating-point)类型。这三种类型之下分别是:short、int、long、char、float、double 这六个关键字再加上两个符号说明符signed和unsigned就基本表示了C语言的最常用的数据...

C程序中,有符号整型变量和无符号整型变量的区别在于哪里?
C语言中无符号整型变量和有符号整型变量在同一系统中所占用的数据宽度一样。不同的是:有符号整型变量把数据的最高位作为符号位使用, 因此能表示数的正负, 表示范围: 对于16位的变量为: -32368<=变量<=32367, 对于32位的变量为:-2147483648<=变量<=2147483647;无符号整型变量把数据的最高位仍作为...

c语言的基本数据类型都有什么,麻烦知道用大括号分类,非常感谢
C语言的3种基本数据类型是什么? C语言中的三种基本数据类型是:整型 、实型 、字符型 。 1 整型,包括short, int, long, long long等,用以表示一个整数,默认为有符号型,配合unsigned关键字,可以表示为无符号型。 2 实型,即浮点型,包括float, double,用来表示实数,相对于整型,该类型...

在C语言里数据中的有符号与没符号,符号指的是什么了。
而无符号数就是不需要符号位,所有二进制位都用来表示这个数。因此一个有符号32位整数实际在计算机中只有31位用来表示数值,其代表的数值范围就在正负二的三十一次方之间,而无符号32位整数在计算机中所有的32位都用来表示数值,其代表的范围就在零到二的三十二次方之间了。其它的数据类型也以此类推。

c语言 u是什么意思
在C语言中,u通常表示无符号整型,也就是unsigned。在C语言中,整型变量有两种类型:带符号整型(signed)和无符号整型(unsigned)。无符号整型的取值范围比带符号整型大,但无法表示负数。一般情况下,使用无符号整型时需要注意溢出问题。在C语言中,u还可以表示Unicode字符。Unicode是一种字符集,用于在...

C语言中如何定义有符号整数
C语言中,有符号数与无符号数主要是由于是高位是否代表符号(正、负数)来决定的。有符号数是最高位(二进制位)代表符号,1代表是负数,0代表是正数,不管是正数还是负数都是以补码的形式存储与使用的。(1)正数的补码:与原码相同。 例如,+9的补码是00001001。(2)负数的补码:符号位为1,其余...

关于C语言中有符号的整数值范围为什么是从-32768~32767
这也是负数表示的范围比正数多1的原因。综上,对于任意位的,无论是8位,16位,32位甚至64位的整数类型表示范围的计算公式为:如总位数为n位,那么有符号数的范围为 -2^(n-1) ~ 2^(n-1)-1 无符号数的表示范围为:0~2^n-1 在这个公式中,^表示乘方。2^n就是2的n次幂。

井陉矿区15145922443: c语言中signed 和unsigned是什么意思 -
锁秦佑苏: 1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数. 2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负. 3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用...

井陉矿区15145922443: C语言中的有符号和无符号是什么意思给仔细讲讲
锁秦佑苏: 有符号就是signed:在存放整数的储存单元中,最左边的一位是表示符号位,该位为0,表示数值为正,1为负. 无符号就是unsigned:就是最左边的那一位没有符号位

井陉矿区15145922443: C语言中如何定义有符号整数 -
锁秦佑苏: C语言中定义有符号整型:signed int x; 由于signed 可以省略,所以 int x; 也是可以定义有符号整型变量x C语言中,有符号数与无符号数主要是由于是高位是否代表符号(正、负数)来决定的.有符号数是最高位(二进制位)代表符号,1代...

井陉矿区15145922443: C语言 四种基本数据类型 -
锁秦佑苏: C语言有四种基本数据类型:整型,浮点型,指针,聚合类型(数组和结构体). 1、整型家族有九种数据类型:字符型(char), 有符号字符型(signed char),无符号字符型 (unsigned char),短整型( short) ,无符号短整型( unsigned...

井陉矿区15145922443: C语言中unsigned和signed在声明时有什么作用? -
锁秦佑苏: signed和unsigned用于修饰整数类型(包括char,从ANSI C89标准开始支持). signed表示有符号,unsigned表示无符号.对应的有符号数的最大取值要比无符号的小约一半,因为最高一位被用来表示符号. 默认的int、short、long、long long...

井陉矿区15145922443: c语言变量分为signed 和unsigned 两种,这里有符号和没符号 区别在哪里? 举个例子说下. -
锁秦佑苏: char的范围是-128到127 unsigned char的范围是0到255

井陉矿区15145922443: c语言signed char, char, unsinedchar区别 -
锁秦佑苏: 我不是很赞同这句话!!(1) char 和 signed char是一个意思,没有unsigned标识,就是有符号类型 unsined char是无符号类型!(2) char ch='a' ; unsigned char ch1='b' ; 无论是ch=ch1; 还是ch1=ch ;都不需要类型转化,因为它俩的大小和数据存储方式是相同的,区别只在字节的第一位如何解释的问题! (3) 有符号类型首位表示符号,0正,1负.无符号没这说法,8位全表示数. 用这个来说类型转化是有问题的!

井陉矿区15145922443: C语言 请问signed char,unsigned char,short,unsigned sh -
锁秦佑苏: signed 和 unsigned 是C语言中的类型指示符(type specifier),signed 指示被声明的对象的类型为有符号整型(signed integer type),unsigned 指示被声明的对象的类型为无符号整型(unsigned integer type). 除了用于 bit field,单独使用的 ...

井陉矿区15145922443: C语言中的有符号和无符号是什么意思给仔细讲讲 -
锁秦佑苏: 用简单的int型来举例 int == (signed) int int a;a 的取值范围显而易见,是 - 2^31 到 2^31-1unsigned = unsigned (int) unsigned int b;b 的取值范围是 0 到 2^32 -1也就是说,无符号类型无法显示负数,并且将原来最高位用来表示正负的一位二进制用来表示数字大小.

井陉矿区15145922443: c语言提供的合法的数据类型关键字 -
锁秦佑苏: C语言的合法数据类型的关键字大体上分为:int(整型)、float(单精度型)、double(双精度型)和char(字符型).除了这基本的4种类型外,还有一些数据类型的修饰符,有long(长整型)、short(短型)、signed(有符号型)和unsigned(无符号型).

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网