Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
412 views
in Technique[技术] by (71.8m points)

计算机为什么要区分无符号数与有符号数

如题,我在网上搜到的一个答案是:内存大小不一样,无符号占用内存小,当不需要负数,内存要求很小的情况下一般都用无符号数。
请教一下各位的看法


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

???

胡说八道呢这不是?误人子弟啊!

内存占多大,是由数据类型决定的,跟有无符号有啥关系?

之所以要区分有无符号,是因为电子计算机工作方式决定的。

电子要么阴、要么阳,跟数据二进制一样。

0000 0000 就是 8 个阴,换算成十进制就是 0;1111 1111 就是 8 个阳,不考虑符号换算成十进制就是 255,这也就是 8 位整数的范围。要 8 个电子当然就占 8 位,跟符号有啥关系?

但现实中一定有负数啊,负号咋用电子表示?于是就拿第一位电子当正负号吧,0 就是正,1 就是负。所以 8 位整数范围就变成了 -128~127(怎么算的,自行恶补补码相关知识)。但还是 8 位啊,内存还能变小??


【补充】

发完答案我突然反应过来了,你说内存占用小也有一定道理。

比如要存 200 这个数,如果是无符号的、直接用 8 位(在大多数编程语言中也就是 byte)就能存的下了。

但如果是有符号的,8 位最大也才 128,所以要存就只能是 16 位(在大多数编程语言中也就是 short)。但如果这个数最大取值也就是 200,那么用 16 位存就很浪费。

上古时代,内存是很金贵的,所以能省则省。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...