当前位置:首页 » 编程语言 » c语言无符号与有符号

c语言无符号与有符号

发布时间: 2022-05-18 18:32:56

A. 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,都不会做扩展。

B. C语言里区分有符号型和无符号型,两者各有什么用意

我简单的解释下,希望你听明白。
一个数据在计算机中是按2进制存储的,在计算机中就是8个0或1组成的,比如0,在计算机中就是
00000000。这种数字的第一位是标示符号的,如果是0就是正数,如果是1就是负数。
如果是无符号型的数据,第一位就会默认为0,并且不能更改。有符号则没有严格限定。
这样造成的结果就是无符号型的数据会在有符号型数据的基础上在正数部分增加一半的取值范围。

C. C语言中有符号和无符号是什么意思解释一下

有称号数是负数、0和正数集,无符号数是0和正数集。

D. 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会隐含地将有符号参数强制转换为无符号数,并假设这两个数都是非负的,来执行这个运算。

E. c语言中整型数据中,有符号与无符号是什么意思,能举例说明下么

有符号就是可以表达负数有符号位
无符号就是不能表示负数没有符号位
如基本整型 (int) 数的范围为-2 147 483 648~2 147 483 647 即-2^31~(2^31-1)
无符号整型(unsigned int) 数的范围为0~4 294 967 295 即0~(2^32-1)
通俗一点就是输出一个可以输出负数一个不行
望采纳,谢谢

F. C语言中有符号整型和无符号整型的区别

有符号:用最高为来表示符号位 , 1表示负,0表示正
无符号:全部用来表示实际数。

两者的取值范围不同
有符号整型为 -32768 到 32767
无符号整型 为 0 到 65535

G. C语言有符号和无符号的有什么不同啊

比如说整型变量吧。unsigned int 是从0到2的32次方减1,而signed int 是从负2的31次方到正2的31次方减1.
在计算机里,整型变量占用4字节,也就是32位的存储空间。对于有符号数来说,正负号要单独占一位。所以除去符号位以外,数的绝对值就占31位。这就是有符号和无符号的区别。

H. C语言中无符号整型变量和有符号整型变量指什么

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

I. c语言中无符号的数与有符号的有什么区别如题 谢谢了

表示范围不相同 无符的最高位是用来表示数值的,有符的是用来表示符号的(1表示负数,0表示正数) 例如1001 无符:9 有符:-6

J. c语言:无符号和有符号是什么东东

无符号就是没有负数,只有0和正数
有符号是正数、0、负数都有

热点内容
神秘顾客访问 发布:2025-05-15 20:33:39 浏览:296
安卓市场手机版从哪里下载 发布:2025-05-15 20:17:28 浏览:814
幼儿速算法 发布:2025-05-15 20:15:08 浏览:86
best把枪密码多少 发布:2025-05-15 20:13:42 浏览:548
android安装程序 发布:2025-05-15 20:13:20 浏览:559
c语言跳出死循环 发布:2025-05-15 20:06:04 浏览:824
a19处理器相当于安卓哪个水平 发布:2025-05-15 20:05:29 浏览:639
荣耀9i安卓强行关机按哪个键 发布:2025-05-15 20:00:32 浏览:750
密码锁写什么最好 发布:2025-05-15 19:05:31 浏览:783
5的源码是 发布:2025-05-15 19:04:07 浏览:719