正在加载图片...
很自然,我们可以想到,一种数据类型允许的最大值,和它的位数有关。具体的计算方 法方法是,如果它有n位,那么最大值就是 n位二进制数的最大值:1*2(m)+1*2-2 +1*2° 任何一种基本数据类型,都有其范围。比如字符类型,它的最大值是255,那么,当一个 数在其类型的范围己经是最大值时,如果再往上加1,就会照成“溢出”。 其实,有限定的范围的数量,并不只在计算机中出现。钟表就是一个例子。10点再加1 点是11点,再加1点是12点,可是再加1点,就又回到1点。再如汽车的行程表,假设 最多只能显示99公里,当达到最高值后继续行驶,行程表就会显示为00000公里。 4.2.4理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数。同样是年纪和工资,前者不需要有负值,但后 者可能需要一一至少所有的老板都这样认为 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答 种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念 说就得一节课,这一些我们需要在第6章中用一章的篇幅讲2进制的一切。再者,用“补 码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。 却并没有告诉你为什么用这个公式就可以和答案? 另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是0,表示正数, 最高位是1,表示负数。这种说法本身没错,可是如果没有下文,那么它就是错的。至少它 不能解释,为什么字符类型的-1用二进制表示是“1111111”(16进制为FF):而不是我 们更能理解的“10000001”。(为什么说后者更好理解呢?因为既然说最高位是1时表示 负数,那10000001不是正好是-1吗?) 让我们从头说起 1、你自已决定是否需要有正负 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决 定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带正负的类型。很自然,我们可以想到,一种数据类型允许的最大值,和它的位数有关。具体的计算方 法方法是,如果它有 n 位,那么最大值就是: n 位二进制数的最大值:1 * 2(n-1) + 1 * 2(n-2) + . .. + 1 * 2 0 任何一种基本数据类型,都有其范围。比如字符类型,它的最大值是 255,那么,当一个 数在其类型的范围已经是最大值时,如果再往上加 1,就会照成“溢出”。 其实,有限定的范围的数量,并不只在计算机中出现。钟表就是一个例子。10 点再加 1 点是 11 点,再加 1 点是 12 点,可是再加 1 点,就又回到 1 点。再如汽车的行程表,假设 最多只能显示 99999 公里,当达到最高值后继续行驶,行程表就会显示为 00000 公里。 4.2.4 理解有符号数和无符号数 回头看上一节,我们所讲的数都是正数。同样是年纪和工资,前者不需要有负值,但后 者可能需要——至少所有的老板都这样认为。 那么,负数在计算机中如何表示呢? 这一点,你可能听过两种不同的回答。 一种是教科书,它会告诉你:计算机用“补码”表示负数。可是有关“补码”的概念一 说就得一节课,这一些我们需要在第 6 章中用一章的篇幅讲 2 进制的一切。再者,用“补 码”表示负数,其实一种公式,公式的作用在于告诉你,想得问题的答案,应该如何计算。 却并没有告诉你为什么用这个公式就可以和答案? 另一种是一些程序员告诉你的:用二进制数的最高位表示符号,最高位是 0,表示正数, 最高位是 1,表示负数。这种说法本身没错,可是如果没有下文,那么它就是错的。至少它 不能解释,为什么字符类型的-1 用二进制表示是“1111 1111”(16 进制为 FF);而不是我 们更能理解的“1000 0001”。(为什么说后者更好理解呢?因为既然说最高位是 1 时表示 负数,那 1000 0001 不是正好是-1 吗?)。 让我们从头说起。 1、你自已决定是否需要有正负。 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决 定某个量是否需要正负。如果这个量不会有负值,那么我们可以定它为带正负的类型
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有