百科狗-知识改变命运!
--

有符号和无符号有什么区别?

乐乐1年前 (2023-12-17)阅读数 6#综合百科
文章标签符号高位

你会这样问,应该是在看C吧?

=====

当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。

因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。

首先进行一个实验,分别定义一个signed int型数据和unsigned int型数据,然后进行大小比较:

unsigned int a=20;

signed int b=-130;

a>b?还是b>a?实验证明b>a,也就是说-130>20,为什么会出现这样的结果呢?

这是因为在C语言操作中,如果遇到无符号数与有符号数之间的操作,编译器会自动转化为无符号数来进行处理,因此a=20,b=4294967166,这样比较下去当然b>a了。

=====

而对于浮点数来说,浮点数(float,double)实际上都是有符号数,unsigned 和signed前缀不能加在float和double之上,当然就不存在有符号数根无符号数之间转化的问题了。

汇编语言中的有符号数和无符号数有区别吗?怎么知道是有符号数和无符号数?

在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

void

f(unsigned

char

v)

{

char

c

=

v;

unsigned

char

uc

=

v;

unsigned

int

a

=

c,

b

=

uc;

int

i

=

c,

j

=

uc;

printf("----------------\n");

printf("%%c:

%c,

%c\n",

c,

uc);

printf("%%X:

%X,

%X\n",

c,

uc);

printf("%%u:

%u,

%u\n",

a,

b);

printf("%%d:

有符号和无符号有什么区别?

%d,

%d\n",

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

有符号数和无符号数有区别吗?

--使用汇编语言编写程序时,数字是写给人看的,有正负号(+、-),就是有符号数。

--没有,则是无符号数。

--这些数字,经过编译,生成了机器码,这就是给CPU看的,这时,就没有区别了。

怎么知道是有符号数和无符号数?

--程序中的数,看符号即可。

--如果是机器码,分不清楚的,谁存的,谁才能知道。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)