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

作者&投稿:实阁 (若有异议请与网页底部的电邮联系)
C语言中signed 和unsigned是什么意思?~

1、signed是默认的,表示这个变量是有符号的,可以存储整数和负数。
2、unsigned则需要显示给出表示这个变量,没有符号值能存储数的大小,而且不能表示正负。
3、signed存储符号是有代价的,代价就是存储空间中的一个比特位专门用来存储符号,这一位不能表示数值。一般来说,同类型的signed能够存储的数的绝对值大小要小于undigned。
4、unsigned的作用就是将数字类型无符号化,
例如
int
型的范围:-2^31
~ 2^31
-
1,而unsigned
int的范围:0
~
2^32。
5、signed在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。
扩展资料:
signed
和unsigned的联系:
整型的每一种都有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。
无符号版本和有符号版本的区别就是有符号类型需要使用一个bit来表示数字的正负,比如16位系统中一个int能存储的数据的范围为–32768
~
32767(16位2进制的最高位作为符号位‘1’为负‘0’为正),而unsigned能存储的数据范围则是0~65535(这个最高位不用做符号位,所以是2的16次方,一共65536)。由于在计算机中,整数是以补码形式存放的。
参考资料:搜狗百科-signed

你既然知道用4294967295来试验,那么基础的什么数值范围的,我就不说了。

之所以输出结果都是-1
4294967295,是因为两个变量实际保存的内容是一样的,这个没有区别。而输出格式%d决定了实际显示。
但在参与运算的时候,就完全不同了。

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类型



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 次方减一。

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

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

主要是取值范围。

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

有什么不明白可以HI我 细聊

简单说,unsigned是无符号类型,signed 是有符号类型。比如unsigned int 的取植范围从零开始,signed int 取植有负数。

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


C语言中的有符号和无符号是什么意思给仔细讲讲
有符号数 有符号数的实例 有符号数是针对二进制来讲的。 用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。 有符号数的表示:计算机中的数据用二进制表示,数的符号也只能用0\/1表示。一般用最高有效位(MBS)来表示数的符号,正数用0表示,负数用1表示。

51单片机c语言程序
答:楼主先搞清C51中定义数据的类型。char型 8位(-127到128);int型16位-32727到+32728(两个字节)unsigned char是8位但从0到255,unsignde int 16位从0到65535;楼主程序中的TH0\/TL0是8位uchar型;tmp是16位uint型。tmp=TL0|(TH0<<8);这句在执行时先进行类型转换,把TL0\/TH0暂时转换成...

c语言中,头文件stdlib.h主要包含什么函数?
常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 具体的内容可以打开编译器的include目录里面的stdlib.h头文件查看。C语言为了方便用户编写程序,为用户开发了大量的库函数,其定义在.h文件中,用户可以调用这些函数实现强大的功能。

C语言中头文件stdlib.h是干什么用的,怎么用?
常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 具体的内容可以打开编译器的include目录里面的stdlib.h头文件查看。C语言为了方便用户编写程序,为用户开发了大量的库函数,其定义在.h文件中,用户可以调用这些函数实现强大的功能。

c语言题目:若有下列定义:char a;int b;float c;double d;c*=b+...
你好!!!char a;int b;float c;double d;c*=b+d-c这个表达式中含有不同的数据类型,那么 编译器 就会自动把低级类型向高级 类型转换 (当然这个转换是自动转换的)即编译器会把char ,int,float 转换成double的类型,c*=b+d-c但是我们定义变量c是float类型的,那么这个计算结果就会 强制转换...

什么是DWORD?怎么用?
就是UNSIGN LONG 在win32下是4个字节 它的长度是定义的 也就是在win32中有这样的定义:define DWORD unsigned long 所以比较方便移植用的 Windows下经常用来保存地址(或者存放指针)其他unsigned long可以用的地方,它也是可以用的 定义long是有原因的。微软说是为了迎接64位时代的到来,提前做的准备。见...

C语言中&,%d,int,return(0)都是什么意思??
&是一个运算符。& 运算符在C语言中有两个意义:1、取地址算符;所谓取地址应该这么理解:每一个变量在内存中都占用一定的空间,我们编程要对这个变量进行操作,就要通过它的空间逻辑地址来得到它、修改它。当然,关于地址理解远不止那么简单,这里还与指针有关系,需要慢慢理解。2、按位与运算符;所谓...

帮忙啊 C语言的延时函数 不懂能讲解下么
首先delay函数用for循环控制空操作:for(j=0;j<255;j==);再加上外层循环for(k=0;k<=1;k++)来实现延时。其中void delay(unsignde shar i) i 为形参。而在主函数delay(10) 10为实参,遵循值的单向传递性。在调用delay函数时,i为10.。但是你这个延时函数写的有问题,应该做下修改: void ...

C++语言中的库函数里的"cstdlib"是什么功能
cstdlib是C++里面的一个常用函数库, 等价于C中的<stdlib.h>。stdlib.h可以提供一些函数与符号常量,具体如下:根据ISO标准,stdlib.h提供以下类型:size_t, wchar_t, div_t, ldiv_t, lldiv_t 常量:NULL, EXIT_FAILURE, EXIT_SUCCESS, RAND_MAX, MB_CUR_MAX 函数:atof, atoi, atol, ...

C语言中srand随机函数怎么用?
srand()函数是C语言中产生随机数的一个函数。函数原型: void srand(unsigned seed)功 能: 产生随机数的起始发生数据,和rand函数配合使用头 文 件: stdlib.h time.h 举例如下:include <stdio.h> #include <stdlib.h> #include int main(void) { int i; time_t t; ...

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

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

晴隆县13140927014: C语言中unsigned和signed数据的转换 -
僪胡苏诺: 先讲一下 原码 补码 反码的 概念 正整数的 原码 补码 反码 都是一样的负数的反码是将其原码除 符号位之外的各位取反 负数的补码是将其原码除 符号位之外的各位取反 再在末尾加1假设 存在 一个字节的整型 signed int8 x = -5 x的原码1000 ...

晴隆县13140927014: c语言变量分为signed 和unsigned 两种,这里有符号和没符号 区别在哪里? 举个例子说下. -
僪胡苏诺: char的范围是-128到127 unsigned char的范围是0到255

晴隆县13140927014: c语言中signed变量和unsigned有区别吗 singed的没也符号的吗,变量signed和unsigned不都是没符号的吗,如果想让输出的数值有符号应该怎么运用unsigned变量啊 -
僪胡苏诺: signed和unsigned有区别,前者是有符号的变量,后者是无符号的变量.以8位整型为例,signed的表示范围是-128至127,unsigned的表示范围是0至255.你最后提的问题,本身存在一定的误解.数值是否有符号,和你最初的定义和最后的使用有关.这不是运用unsigned的问题.如果希望让输出的数值有符号,以整型为例,在格式化输出的时候就需要用%d,对于无符号数就需要用%u.

晴隆县13140927014: C语言中,signed long类型的与unsigned long类型的有什么区别? -
僪胡苏诺: 能表示的数值区间不同 signed long能表示[-2^31, 2^31-1]之间的整数 unsigned long能表示[0, 2^32-1]之间的整数

晴隆县13140927014: C语言中的定义整型变量时前面的unsigned是什么意思啊 -
僪胡苏诺: 无符号,比如:int a,那么取值范围可以为负;如果是unsigned int a,那么就是只可能为0以上的整数,包括0.

晴隆县13140927014: c语言unsigned -
僪胡苏诺: 比较简单的区别就是,如果你使用的是char类型时,不需要unsigned;如果你是用的int 类型,并且一定不会用到负数,这时用unsigned做修饰可以防止出错.

晴隆县13140927014: 在C语言中,unsigned char是什么类型? -
僪胡苏诺: unsigned char是无符号字节型,char类型变量的大小通常为1个字节(1字节=8个位),且属于整型.整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号...

晴隆县13140927014: signed和unsigned在C语言中怎么样用,还有算术模2n定律是什么 -
僪胡苏诺: 用在声明变量的时候作为修饰 例如我要声明一个无符号的整型变量:unsigned int a; 普通的整型变量默认为有符号的,范围在-2147483648~2147483647 有符号的整型变量的范围在0~4294967295

你可能想看的相关专题

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