跳至主要內容

基本数据类型


基本数据类型

谈及计算机中的数据,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织形式各异,但它们都由各种基本数据类型构成。

基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种类型。

基本数据类型以二进制的形式存储在计算机中。一个二进制位即为 11 比特。在绝大多数现代系统中,11 字节(byte)由 88 比特(bits)组成。

基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。

下表列举了各种基本数据类型的占用空间、取值范围和默认值。此表格无须硬背,大致理解即可,需要时可以通过查表来回忆。

表 -  基本数据类型的占用空间和取值范围

类型符号占用空间最小值最大值默认值
整数byte1 byte27-2^7 (128-128)2712^7 - 1 (127127)00
short2 bytes215-2^{15}21512^{15} - 100
int4 bytes231-2^{31}23112^{31} - 100
long8 bytes263-2^{63}26312^{63} - 100
浮点数float4 bytes1.175×10381.175 \times 10^{-38}3.403×10383.403 \times 10^{38}0.0f0.0 f
double8 bytes2.225×103082.225 \times 10^{-308}1.798×103081.798 \times 10^{308}0.00.0
字符char2 bytes / 1 byte0021612^{16} - 100
布尔bool1 bytefalse\text{false}true\text{true}false\text{false}

对于上表,需要注意以下几点。

那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方式。它的主语是“结构”而非“数据”。

如果想要表示“一排数字”,我们自然会想到使用数组。这是因为数组的线性结构可以表示数字的相邻关系和顺序关系,但至于存储的内容是整数 int、小数 float 或是字符 char ,则与“数据结构”无关。

换句话说,基本数据类型提供了数据的“内容类型”,而数据结构提供了数据的“组织方式”。例如以下代码,我们用相同的数据结构(数组)来存储与表示不同的基本数据类型,包括 intfloatcharbool 等。

    # 使用多种基本数据类型来初始化数组
    numbers: list[int] = [0] * 5
    decimals: list[float] = [0.0] * 5
    # Python 的字符应被看作长度为一的字符串
    characters: list[str] = ['0'] * 5
    bools: list[bool] = [False] * 5
    # Python 的列表可以自由存储各种基本数据类型和对象引用
    data = [0, 0.0, 'a', False, ListNode(0)]

=== "C++"

    // 使用多种基本数据类型来初始化数组
    int numbers[5];
    float decimals[5];
    char characters[5];
    bool bools[5];
    // 使用多种基本数据类型来初始化数组
    int[] numbers = new int[5];
    float[] decimals = new float[5];
    char[] characters = new char[5];
    boolean[] bools = new boolean[5];

=== "C#"

    // 使用多种基本数据类型来初始化数组
    int[] numbers = new int[5];
    float[] decimals = new float[5];
    char[] characters = new char[5];
    bool[] bools = new bool[5];
    // 使用多种基本数据类型来初始化数组
    var numbers = [5]int{}
    var decimals = [5]float64{}
    var characters = [5]byte{}
    var bools = [5]bool{}
    // 使用多种基本数据类型来初始化数组
    let numbers = Array(repeating: Int(), count: 5)
    let decimals = Array(repeating: Double(), count: 5)
    let characters = Array(repeating: Character("a"), count: 5)
    let bools = Array(repeating: Bool(), count: 5)
    // JavaScript 的数组可以自由存储各种基本数据类型和对象
    const array = [0, 0.0, 'a', false];
    // 使用多种基本数据类型来初始化数组
    const numbers: number[] = [];
    const characters: string[] = [];
    const bools: boolean[] = [];
    // 使用多种基本数据类型来初始化数组
    List<int> numbers = List.filled(5, 0);
    List<double> decimals = List.filled(5, 0.0);
    List<String> characters = List.filled(5, 'a');
    List<bool> bools = List.filled(5, false);
    // 使用多种基本数据类型来初始化数组
    let numbers: Vec<i32> = vec![0; 5];
    let decimals: Vec<float> = vec![0.0, 5];
    let characters: Vec<char> = vec!['0'; 5];
    let bools: Vec<bool> = vec![false; 5];
    // 使用多种基本数据类型来初始化数组
    int numbers[10];
    float decimals[10];
    char characters[10];
    bool bools[10];