程式語言簡介/基本型別
外觀
< 程式語言簡介
每種具有型別的程式語言都圍繞著一組有限的基本型別構建這些型別。基本型別是原子的。換句話說,它們不能被分解成更簡單的型別。例如,SML 程式語言有五種基本型別
- bool: 這些是真或假。
- int: 這些是整數,可以是正數或負數。
- real: 這些是實數。 SML 可能會用小數點後最多 12 位有效數字來表示它們,例如:2.7 / 3.33 = 0.810810810811.
- char: 這些是字元。與其他型別相比,它們的語法相當繁瑣。例如#"a".
- string: 這些是字元鏈。但是,與大多數程式語言相反,SML 中的字串不能像字元列表一樣被分解。
不同的語言可能提供不同的基本型別。例如,Java 具有以下基本型別
- bool(1 位)
- byte(1 位元組帶符號)
- char(2 位元組無符號)
- short(2 位元組帶符號)
- int(4 位元組帶符號)
- long(8 位元組帶符號)
- float(4 位元組浮點數)
- double(8 位元組浮點數)
有些作者會說字串是 Java 中的基本型別。另一些人則會說字串是複合型別:它們是字元鏈。然而,無論如何分類字串,我們都同意字串是內建型別。內建型別是使用者未定義的資料型別。由於內建型別是核心語言的一部分,因此它的元素可以被編譯器特殊處理。例如,Java 的字串具有在引號之間的文字的特殊語法。此外,在 Java 中,字串被實現為只讀常量。如果我們嘗試將一個字元插入到字串的中間,那麼我們可以做的是構建一個新的字串,該字串由原始值和我們想要插入的字元組成。
在一些語言中,基本型別是語言規範的一部分。因此,這些型別在支援該語言的任何系統中具有相同的語義。例如,Java 和 SML 中的基本型別就是這樣。例如,在 Java 中,整數型別在任何執行 Java 虛擬機器 的設定中都包含 232 個元素。然而,存在一些系統,其中基本型別的語義取決於程式語言的實現。 C 是一個典型的例子。這種程式語言中整數的大小可能在不同的架構之間有所不同。我們可以使用以下函式來找出 C 中的最大整數
#include<stdio.h>
int main(int argc, char** argv) {
unsigned int i = ~0U;
printf("%d\n", i);
i = i >> 1;
printf("%d\n", i);
}
這個函式在常數時間內執行,因為它是對位進行操作。在不支援此類操作的語言中,通常無法如此快速地找到最大整數。例如,在 SML 中,下面的函式在 時間內找到最大整數,其中 是整數型別中的位數
fun maxInt current inc = maxInt (current + inc) (inc * 2)
handle Overflow => if inc = 1 then current else maxInt current 1