c语言无符号和有符号
‘壹’ c语言 关于有符号、无符号和补码、原码
在C语言中:只有十进制数有符号,八进制和十六进制没有的,一个数的原码是其二进制数,补码是对原码取反后再加上1,
比如: 5则原码是 101,则反码是010,补码=010+1=011
‘贰’ 关于C语言中有符号型signed和无符号型unsigned的区别
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。
‘叁’ C语言中无符号整型变量和有符号整型变量指什么
C语言中无符号整型变量和有符号整型变量在同一系统中所占用的数据宽度一样.
不同的是:
有符号整型变量把数据的最高位作为符号位使用,
因此能表示数的正负,
表示范围:
对于16位的变量为:
-32368<=变量<=32367,
对于32位的变量为:-2147483648<=变量<=2147483647;
无符号整型变量把数据的最高位仍作为数据位使用,
因此不能表示负数,
表示范围:
对于16位的变量为:
0<=变量<=65535,
对于32位的变量为:
0<=变量<=429467295
;
‘肆’ C语言中char类型中的有符号与无符号的区别和意义
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed)
char与unsigned
char之间的区别。首先在内存中,char与unsigned
char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,unsigned
char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。在实际使用过程种有什么区别呢?主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高位而已,在屏幕上面的显示可能不一样。
二者的最大区别是:但是我们却发现在表示byte时,都用unsigned
char,这是为什么呢?首先我们通常意义上理解,byte没有什么符号位之说,更重要的是如果将byte的值赋给int,long等数据类型时,系统会做一些额外的工作。如果是char,那么系统认为最高位是符号位,而int可能是16或者32位,那么会对最高位进行扩展(注意,赋给unsigned
int也会扩展)而如果是unsigned
char,那么不会扩展。最高位若为0时,二者没有区别,若为1时,则有区别了。同理可以推导到其它的类型,比如short,
unsigned
short,等等。
具体可以通过下面的小例子看看其区别
include
<stdio.h>
void
f(unsigned
char
v)
{
char
c
=
v;
unsigned
char
uc
=
v;
unsigned
int
a
=
c,
b
=
uc;
int
i
=
c,
j
=
uc;
printf("----------------
");
printf("%%c:
%c,
%c
",
c,
uc);
printf("%%X:
%X,
%X
",
c,
uc);
printf("%%u:
%u,
%u
",
a,
b);
printf("%%d:
%d,
%d
",
i,
j);
}
int
main(int
argc,
char
*argv[])
{
f(0x80);
f(0x7F);
return
0;
}
结果输出如下:结果分析:
对于(signed)char来说,0x80用二进制表示为1000
0000,当它作为char赋值给unsigned
int或
int
时,系统认为最高位是符号位,会对最高位进行扩展。而0x7F用二进制表示为0111
1111,最高位为0,不会扩展。
对于unsigned
char来说,不管最高位是0,还是1,都不会做扩展。
‘伍’ C语言中有符号整型和无符号整型的区别
有符号:用最高为来表示符号位 , 1表示负,0表示正
无符号:全部用来表示实际数。
两者的取值范围不同
有符号整型为 -32768 到 32767
无符号整型 为 0 到 65535
‘陆’ C语言中的有符号和无符号是什么意思给仔细讲讲
有符号数 有符号数的实例
有符号数是针对二进制来讲的。 用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。 有符号数的表示:计算机中的数据用二进制表示,数的符号也只能用0/1表示。一般用最高有效位(MBS)来表示数的符号,正数用0表示,负数用1表示。 有符号数的编码方式,常用的是补码,另外还有原码和反码等。用不同二进制编码方式表示有符号数时,所得到的机器数可能不一样,但是真值应该是相同的。
无符号数【网络.网络搜索】
无符号数是针对二进制来讲的,无符号数的表数范围是非负数。全部二进制均代表数值,没有符号位。即第一个"0"或"1"不表示正负。 无符号数与有符号数相对
C支持所有整形数据类型的有符号数和无符号数运算。尽管C标准并没有指定某种有符号数的表示,但是几乎所有的机器都使用二进制补码。通常,大多数数字默认都使有符号的,C也允许无符号数和有符号数之间的转换,转换原则是基本的位表示保持不变。因此在一台二进制补码机器上,当从无符号数转换为有符号数时,效果就是应用U2Tw,而从有符号转换为无符号数时,就是应用函数T2Uw,其中w表示数据类型的位数。T2Uw(x) = (x<0)?(x+2w) :x;U2Rw(x) = (x<2w-1)?x:(x-2w); 当执行一个运算时,如果它的一个运算数是有符号的而另一个是无符号的,那么C会隐含地将有符号参数强制转换为无符号数,并假设这两个数都是非负的,来执行这个运算。
‘柒’ c语言中,int什么意思,什么是无符号/有符号整型
int 是整数类型,用于定义变量的类型,有符号,unsigned
int 是无符号的整数类型,直白点说有符号无符号整型就是能不能存放负数。
根据程序编译器的不同,整形定义的字节数不同。51类单片机的C语言中,int代表2个byte(16位);如果是32位ARM处理器的C语言中,则int代表4个byte(32位)。(如32位XP)把int定义为4
byte(32位)。 注意一下取值范围。若在32位系统中,signed
int a, 则a范围[-2^31 , 2^31 -1]
即 [-2147483648,2147483647]。
所以一个int定义需要注意几个方面,一个是类型,一个是存储数据的大小范围。