admin 管理员组文章数量: 1086019
2024年4月22日发(作者:c和指针epub)
1、你自已决定是否需要有正负。
就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须
自已决定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带
正负的类型。
在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),
称为无符类型。
数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只
有符类型。
字符类型也分为有符和无符类型。
比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符
的整数类型。
2、使用二制数中的最高位表示正负。
首先得知道最高位是哪一位?1个字节的类型,如字符类型,最高位是第7位,
2个字节的数,最高位是第15位,4个字节的数,最高位是第31位。不同长度
的数值类型,其最高位也就不同,但总是最左边的那位(如下示意)。字符类型
固定是1个字节,所以最高位总是第7位。
(红色为最高位)
单字节数: 1111 1111
双字节数: 1111 1111 1111 1111
四字节数: 1111 1111 1111 1111 1111 1111 1111 1111
当我们指定一个数量是无符号类型时,那么其最高位的1或0,和其它位一样,
用来表示该数的大小。
当我们指定一个数量是无符号类型时,此时,最高数称为“符号位”。为1时,
表示该数为负值,为0时表示为正值。
3、无符号数和有符号数的范围区别。
无符号数中,所有的位都用于直接表示该值的大小。有符号数中最高位用于表示
正负,所以,当为正值时,该数的最大值就会变小。我们举一个字节的数值对比:
无符号数: 1111 1111 值:255 1* 2
7
+ 1* 2
6
+ 1* 2
5
+ 1* 2
4
+ 1* 2
3
+ 1*
2
2
+ 1* 2
1
+ 1* 2
0
有符号数: 0111 1111 值:127 1* 2 + 1* 2 + 1* 2 + 1* 2 + 1*
2
2
+ 1* 2
1
+ 1* 2
0
同样是一个字节,无符号数的最大值是255,而有符号数的最大值是127。原因
是有符号数中的最高位被挪去表示符号了。并且,我们知道,最高位的权值也是
最高的(对于1字节数来说是2的7次方=128),所以仅仅少于一位,最大值一
下子减半。
不过,有符号数的长处是它可以表示负数。因此,虽然它的在最大值缩水了,却
在负值的方向出现了伸展。我们仍一个字节的数值对比:
无符号数: 0 ----------------- 255
有符号数: -128 --------- 0 ---------- 127
同样是一个字节,无符号的最小值是 0 ,而有符号数的最小值是-128。所以二
者能表达的不同的数值的个数都一样是256个。只不过前者表达的是0到255
这256个数,后者表达的是-128到+127这256个数。
一个有符号的数据类型的最小值是如何计算出来的呢?
有符号的数据类型的最大值的计算方法完全和无符号一样,只不过它少了一个最
高位(见第3点)。但在负值范围内,数值的计算方法不能直接使用1* 2
6
+ 1*
2
5
的公式进行转换。在计算机中,负数除为最高位为1以外,还采用补码形式
进行表达。所以在计算其值前,需要对补码进行还原。这些内容我们将在第六章
中的二进制知识中统一学习。
这里,先直观地看一眼补码的形式:
以我们原有的数学经验,在10进制中:1 表示正1,而加上负号:-1 表示和1
相对的负值。
那么,我们会很容易认为在2进制中(1个字节): 0000 0001 表示正1,则高
位为1后:1000 0001应该表示-1。
然而,事实上计算机中的规定有些相反,请看下表:
6543
版权声明:本文标题:有符号数与无符号数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713730264a648878.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论