首页 > 试题

和有

更新时间:2022-12-02 16:46:56 阅读: 评论:0

中考全托班有用吗-云f


2022年12月2日发(作者:dnf魔神加点)

有符号数和⽆符号数

1、你⾃已决定是否需要有正负。

就像我们必须决定某个量使⽤整数还是实数,使⽤多⼤的范围数⼀样,我们必须⾃已决定某个量是否需要正负。如果这个量不会有负值,那

么我们可以定它为带正负的类型。

在计算机中,可以区分正负的类型,称为有符类型(signed),⽆正负的类型(只有正值),称为⽆符类型。(unsigned)数值类型分为

整型或实型,其中整型⼜分为⽆符类型或有符类型,⽽实型则只有符类型。字符类型也分为有符和⽆符类型。⽐如有两个量,年龄和库

存,我们可以定前者为⽆符的字符类型,后者定为有符的整数类型。

2、使⽤⼆制数中的最⾼位表⽰正负。

⾸先得知道最⾼位是哪⼀位?1个字节的类型,如字符类型,最⾼位是第7位,2个字节的数,最⾼位是第15位,4个字节的数,最⾼位是第

31位。不同长度的数值类型,其最⾼位也就不同,但总是最左边的那位(如下⽰意)。字符类型固定是1个字节,所以最⾼位总是第7位。

(红⾊为最⾼位)

单字节数:11111111

双字节数:11111

四字节数:1111111111

当我们指定⼀个数量是⽆符号类型时,那么其最⾼位的1或0,和其它位⼀样,⽤来表⽰该数的⼤⼩。

当我们指定⼀个数量是⽆符号类型时,此时,最⾼数称为“符号位”。为1时,表⽰该数为负值,为0时表⽰为正值。

3、⽆符号数和有符号数的范围区别。

⽆符号数中,所有的位都⽤于直接表⽰该值的⼤⼩。有符号数中最⾼位⽤于表⽰正负,所以,当为正值时,该数的最⼤值就会变⼩。我们举

⼀个字节的数值对⽐:

⽆符号数:11111111值:255

1*27+1*26+1*25+1*24+1*23+1*22+1*21+1*20

有符号数:01111111值:127

1*26+1*25+1*24+1*23+1*22+1*21+1*20

同样是⼀个字节,⽆符号数的最⼤值是255,⽽有符号数的最⼤值是127。原因是有符号数中的最⾼位被挪去表⽰符号了。并且,我们知

道,最⾼位的权值也是最⾼的(对于1字节数来说是2的7次⽅=128),所以仅仅少于⼀位,最⼤值⼀下⼦减半。

不过,有符号数的长处是它可以表⽰负数。因此,虽然它的在最⼤值缩⽔了,却在负值的⽅向出现了伸展。我们仍⼀个字节的数值对⽐:

⽆符号数:0-----------------255

有符号数:-128---------0----------127

同样是⼀个字节,⽆符号的最⼩值是0,⽽有符号数的最⼩值是-128。所以⼆者能表达的不同的数值的个数都⼀样是256个。只不过前者

表达的是0到255这256个数,后者表达的是-128到+127这256个数。

⼀个有符号的数据类型的最⼩值是如何计算出来的呢?

有符号的数据类型的最⼤值的计算⽅法完全和⽆符号⼀样,只不过它少了⼀个最⾼位(见第3点)。但在负值范围内,数值的计算⽅法不能

直接使⽤1*26+1*25的公式进⾏转换。在计算机中,负数除为最⾼位为1以外,还采⽤补码形式进⾏表达。所以在计算其值前,需要对

补码进⾏还原。

这⾥,先直观地看⼀眼补码的形式:

在10进制中:1表⽰正1,⽽加上负号:-1表⽰和1相对的负值。

那么,我们会很容易认为在2进制中(1个字节):00000001表⽰正1,则⾼位为1后:10000001应该表⽰-1。

然⽽,事实上计算机中的规定有些相反,请看下表:

⼆进制值(1字节)⼗进制值

10000000-128

10000001-127

10000010-126

10000011-125

…………

11111110-2

11111111-1

⾸先我们看到,从-1到-128,其⼆进制的最⾼位都是1,正如我们前⾯的学。负数最⾼为为1

然后我们有些奇怪地发现,10000000并没有拿来表⽰-0;⽽10000001也不是拿来直观地表⽰-1。事实上,-1⽤11111111来表

⽰。

怎么理解这个问题呢?先得问⼀句是-1⼤还是-128⼤?

当然是-1⼤。-1是最⼤的负整数。以此对应,计算机中⽆论是字符类型,或者是整数类型,也⽆论这个整数是⼏个字节。它都⽤全1来表

⽰-1。⽐如⼀个字节的数值中:11111111表⽰-1,那么,11111111-1是什么呢?和现实中的计算结果完全⼀致。11111111-

1=11111110,⽽11111110就是-2。这样⼀直减下去,当减到只剩最⾼位⽤于表⽰符号的1以外,其它低位全为0时,就是最⼩的负

值了,在⼀字节中,最⼩的负值是10000000,也就是-128。

我们以-1为例,来看看不同字节数的整数中,如何表达-1这个数:

字节数⼆进制值⼗进制值

单字节数11111111-1

双字节数11111-1

四字节数1111111111-1

可能有同学这时会混了:为什么11111111有时表⽰255,有时⼜表⽰-1?所以我再强调⼀下前⾯所说的第2点:你⾃已决定⼀个数是有

符号还是⽆符号的。写程序时,指定⼀个量是有符号的,那么当这个量的⼆进制各位上都是1时,它表⽰的数就是-1;相反,如果事选声明

这个量是⽆符号的,此时它表⽰的就是该量允许的最⼤值,对于⼀个字节的数来说,最⼤值就是255。

我们已经知道计算机中,所有数据最终都是使⽤⼆进制数表达。也已经学会如何将⼀个10进制数如何转换为⼆进制数。不过,我们仍然

没有学习⼀个负数如何⽤⼆进制表达。

⽐如,假设有⼀int类型的数,值为5,那么,我们知道它在计算机中表⽰为:

00000101

5转换成⼆制是101,不过int类型的数占⽤4字节(32位),所以前⾯填了⼀堆0。现在想知道,-5在计算机中如何表⽰?在计算机中,

负数以其正值的补码形式表达。

什么叫补码呢?这得从原码,反码说起。

原码:⼀个整数,按照绝对值⼤⼩转换成的⼆进制数,最⾼为为符号位,称为原码。红⾊为符号位

⽐如00000101是5的原码。

10000101是-5的原码

反码:将⼆进制除符号位数按位取反,所得的新⼆进制数称为原⼆进制数的反码。正数的反码为原码,负数的反码是原码符号位外按位取

反。

取反操作指:原为1,得0;原为0,得1。(1变0;0变1)

正数:正数的反码与原码相同。

负数:负数的反码,符号位为“1”,数值部分按位取反。

⽐如:将10000101除符号位每⼀位取反,

得1111111010。

称:1111111010是10000101的反码。

反码是相互的,所以也可称:

1111111010和10000101互为反码。

补码:反码加1称为补码。

正数:正数的补码和原码相同。

负数:按照规则来

也就是说,要得到⼀个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

1111111010是10000101(-5)的反码。

加1得1111111011

所以,-5在计算机中表达为:1111111011。转换为⼗六进制:0xFFFFFFFB。

再举⼀例,我们来看整数-1在计算机中如何表⽰。

假设这也是⼀个int类型,那么:

1、先取-1的原码:10000001

2、除符号位取反得反码:1111111110

3、加1得补码:1111111111

可见,-1在计算机⾥⽤⼆进制表达就是全1。16进制为:0xFFFFFF。

计算机中的带符号数⽤补码表⽰的优点:

1、负数的补码与对应正数的补码之间的转换可以⽤同⼀种⽅法——求补运算完成,可以简化硬件;

2、可将减法变为加法,省去减法器;

3、⽆符号数及带符号数的加法运算可以⽤同⼀电路完成。

可得出⼀种⼼算求补的⽅法——从最低位开始⾄找到的第⼀个1均不变,符号位不变,这之间的各位“求反”(该⽅法仅⽤于做题)。

⽅法例1例2

1.从右边开始,找到第⼀个'1'1100

2.反转从这个'1'之后开始到最左边(不包括符号位)的所有位1100

本文发布于:2022-12-02 16:46:56,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/39015.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:和有
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图