1位元組 = 8位,所以它能表示的最大數當然是8位都是1(既然2進位制的數只能是0或1,如果是我們常見的10進位制,那就8位都為9,這樣說,你該懂了?)
1位元組的二進位制數中,最大的數:11111111。
這個數的大小是多少呢?讓我們來把它轉換為十進位制數。
無論是什麼進位制,都是左邊是高位,右邊是低位。10進位制是我們非常習慣的計數方式,第一位代表有幾個1(即幾個100),第二位代表有幾個10(即幾個101),第三位代表有幾個100(即有幾個102)…,用小學課本上的說法就是:個位上的數表示幾個1,十位上的數表示向個10,百位上的數表示幾個100……
同理可證,二進位制數則是:第1位數表示幾個1 (20),第2位數表示幾個2(21),第3位數表示幾個4(22),第4位數表示向個8(23)……
以前我們知道1個位元組有8位,現在透過計算,我們又得知:1個位元組可以表達的最大的數是255,也就是說表示0~255這256個數。
那麼兩個位元組(雙位元組數)呢?雙位元組共16位。 1111111111111111,這個數並不大,但長得有點眼暈,從現在起,我們要學會這樣來表達二制數:
1111 1111 1111 1111,即每4位隔一空格。
雙位元組數最大值為:
1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + …… + 1 * 22 + 1 * 21 + 1* 20 = 65535
很自然,我們可以想到,一種資料型別允許的最大值,和它的位數有關。具體的計算方法方法是,如果它有n位,那麼最大值就是:
n位二進位制數的最大值:1 * 2(n-1) + 1 * 2(n-2) + ... + 1 * 20
2、理解有符號數和無符號數
負數在計算機中如何表示呢?這一點,你可能聽過兩種不同的回答。
一種是教科書,它會告訴你:計算機用“補碼”表示負數。可是有關“補碼”的概念一說就得一節課,這一些我們需要在第6章中用一章的篇幅講2進位制的一切。再者,用“補碼”表示負數,其實一種公式,公式的作用在於告訴你,想得問題的答案,應該如何計算。卻並沒有告訴你為什麼用這個公式就可以和答案? -----我就是被這個弄混淆的>_<
另一種是一些程式設計師告訴你的:用二進位制數的最高位表示符號,最高位是0,表示正數,最高位是1,表示負數。這種說法本身沒錯,可是如果沒有下文,那麼它就是錯的。至少它不能解釋,為什麼字元型別的-1用二進位制表示是“1111 1111”(16進製為FF);而不是我們更能理解的“1000 0001”。(為什麼說後者更好理解呢?因為既然說最高位是1時表示負數,那1000 0001不是正好是-1嗎?-----re!當初偶就是這麼想的,so一直在腦中打架,越打越混淆=,=)。
1位元組 = 8位,所以它能表示的最大數當然是8位都是1(既然2進位制的數只能是0或1,如果是我們常見的10進位制,那就8位都為9,這樣說,你該懂了?)
1位元組的二進位制數中,最大的數:11111111。
這個數的大小是多少呢?讓我們來把它轉換為十進位制數。
無論是什麼進位制,都是左邊是高位,右邊是低位。10進位制是我們非常習慣的計數方式,第一位代表有幾個1(即幾個100),第二位代表有幾個10(即幾個101),第三位代表有幾個100(即有幾個102)…,用小學課本上的說法就是:個位上的數表示幾個1,十位上的數表示向個10,百位上的數表示幾個100……
同理可證,二進位制數則是:第1位數表示幾個1 (20),第2位數表示幾個2(21),第3位數表示幾個4(22),第4位數表示向個8(23)……
以前我們知道1個位元組有8位,現在透過計算,我們又得知:1個位元組可以表達的最大的數是255,也就是說表示0~255這256個數。
那麼兩個位元組(雙位元組數)呢?雙位元組共16位。 1111111111111111,這個數並不大,但長得有點眼暈,從現在起,我們要學會這樣來表達二制數:
1111 1111 1111 1111,即每4位隔一空格。
雙位元組數最大值為:
1 * 215 + 1 *214 + 1* 213 + 1 * 212 + 1 * 211 + 1 * 210 + …… + 1 * 22 + 1 * 21 + 1* 20 = 65535
很自然,我們可以想到,一種資料型別允許的最大值,和它的位數有關。具體的計算方法方法是,如果它有n位,那麼最大值就是:
n位二進位制數的最大值:1 * 2(n-1) + 1 * 2(n-2) + ... + 1 * 20
2、理解有符號數和無符號數
負數在計算機中如何表示呢?這一點,你可能聽過兩種不同的回答。
一種是教科書,它會告訴你:計算機用“補碼”表示負數。可是有關“補碼”的概念一說就得一節課,這一些我們需要在第6章中用一章的篇幅講2進位制的一切。再者,用“補碼”表示負數,其實一種公式,公式的作用在於告訴你,想得問題的答案,應該如何計算。卻並沒有告訴你為什麼用這個公式就可以和答案? -----我就是被這個弄混淆的>_<
另一種是一些程式設計師告訴你的:用二進位制數的最高位表示符號,最高位是0,表示正數,最高位是1,表示負數。這種說法本身沒錯,可是如果沒有下文,那麼它就是錯的。至少它不能解釋,為什麼字元型別的-1用二進位制表示是“1111 1111”(16進製為FF);而不是我們更能理解的“1000 0001”。(為什麼說後者更好理解呢?因為既然說最高位是1時表示負數,那1000 0001不是正好是-1嗎?-----re!當初偶就是這麼想的,so一直在腦中打架,越打越混淆=,=)。