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


本文标签: 类型 符号 表示 数值