2010年3月6日 星期六

資料型態認識─整數 (Integer)

http://4rdp.blogspot.com/2010/03/integer.html?m=0

無論你使用何種程式語言,正確運用資料型態,可以避免不必要的程式錯誤,在此我將一系列介紹變數型態基本概念,讓各位入門初學者不會錯用。

今天只談整數,整數有兩大類,一為正整數包含零,另一為正負整數,先看看電腦如何處理這些數值,為了方便解釋先以三位元舉例,而後再將觀念拓展到更高位元。

假設有一個三位元處理器,表示它可以一次處理三個位元資料,每個位元資料不是一就是零,那麼正整數可以有下列組合表示:
0 ─ 000
1 ─ 001
2 ─ 010
3 ─ 011
4 ─ 100
5 ─ 101
6 ─ 110
7 ─ 111

如果要表示有正負號的數值,那麼最高位元(MSB)用來代表正負號:
-4 ─ 100
-3 ─ 101
-2 ─ 110
-1 ─ 111
+0 ─ 000
+1 ─ 001
+2 ─ 010
+3 ─ 011

這就是為什麼 BASIC、C、JAVA‧‧‧,所有程式語言變數宣告時,要指明是否帶正負號,下列為常見宣告方式:
unsigned char ─ 8 位元正整數
unsigned short ─ 16位元正整數
unsigned int ─ 16 或 32 位元正整數
unsigned long ─ 32位元正整數

char ─ 8 位元整數 (注意有的編譯器會把 char 當成正整數,那麼宣告就要改成 signed char)
short ─ 16位元整數
int ─ 16 或 32 位元整數
long ─ 32位元整數

int 比較特別,它是 16 / 32 bits?取決於 CPU 以及編譯器(Compiler)設計,通常它是 16 bits,除非高階系統有特別聲明代表 32 bits。

接下來看看這些數值範圍,n 位元
正整數 0 ~ 2n-1
整數 -2n-1 ~ 2n-1-1


因此,
unsigned char ─ 0 ~ 255
unsigned short ─ 0 ~ 65535
unsigned long ─ 0 ~ 4294967295

char ─ -128 ~ 127
short ─ -32768 ~ 32767
long ─ -2147483648 ~ 2147483647

最後提醒程式設計初學者,要留意數值範圍,選擇適當的宣告,否則會發生不可預期的狀況,例如:
變數宣告 unsigned char,當數值 255 再加一,會變為 0。
宣告 char,數值 127 再加一,會變為 -128。

4 則留言:

  1. 上了一課囉, 深入淺出. 這樣沒有計算機概論基礎的人也可以大略了解電腦是如何表示數字的.

    您要不要接著談小數表示以及浮點數運算啊?

    阿吉

    回覆刪除
  2. 阿吉,

    謝謝您留言,原來計畫先討論字元與字串,然後才是浮點數,不過剛收到探奇邱老師的新書,應該會插文推薦。

    有任何不易了解的地方,歡迎您留言提問。

    最後,謝謝您的 TECHNIC 8418,我的小朋友能夠依照說明書獨立組裝,玩的很開心。

    回覆刪除
  3. 版主 你好
    唐突問些問題
    煩請幫助
    現今敝人在作有關音訊辨別
    1.有那些軟體可作音訊頻率分析?
    2.音訊頻率分析後若能找出特徵性如頻率
    3.如何利用處理技術作應用如顯示?

    如能得協助 感恩
    祝福順心
    蘇子20100313
    e-mail

    回覆刪除
  4. 蘇老師,

    關於這方面主題的答覆,改貼在世界第一簡單 傅立葉分析,請參考。

    回覆刪除