理解有符号数和无符号数 2008-09-23 14:15 负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答。 一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一说就得一节课,这一些我们需要在第 6 章中用一章的篇幅讲2 进制的一切。再者,用“补码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。却并没有告诉你为什么用这个公式就可以和答案? 另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数,最高位是1,表示负数。这种说法本身没错,可是如果没有下文,那么它就是错的。至少它不能解释,为什么字符类型的-1 用二进制表示是“1111 1111”(16 进制为 FF);而不是我们更能理解的“1000 0001”。(为什么说后者更好理解呢?因为既然说最高位是1 时表示负数,那 1000 0001 不是正好是-1吗?)。 让我们从头说起。 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、无符号数和有符号数的范围区别。 无符号数中,所有的位都用于直接表示该...