1. NULL,0,'\0',‘0’

    int main()
    {
        char arr[] = {0, '\0', '0', 48};
        printf("%c\n", arr[0]);
        printf("%c\n", arr[1]);
        printf("%c\n", arr[2]);
        printf("%c\n", arr[3]);
        printf("---------------\n");
        printf("%d\n", arr[0]);
        printf("%d\n", arr[1]);
        printf("%d\n", arr[2]);
        printf("%d\n", arr[3]);
    
        return 0;
    }
    

    输出:

    
    
    0
    0
    ---------------
    0
    0
    48
    48
    
  2. UTF-8 向下兼容 ASCII 编码,UTF-8 编码中,一个英文字为一个字节,一个中文一般为三个字节(ASCII、Unicode、UTF-8

    • 0xxxxxxx:单字节编码形式,这和 ASCII 编码完全一样,因此 UTF-8 是兼容 ASCII 的;
    • 110xxxxx 10xxxxxx:双字节编码形式;
    • 1110xxxx 10xxxxxx 10xxxxxx:三字节编码形式;
    • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx:四字节编码形式;
    • UTF-8:每字 1 ~ 6 字节
    • Unicode(UCS-2):每字都是 2 bytes
    • UTF-16:每字 2 ~ 4 字节
    • UTF-32(UCS-4):每字都是 4 bytes
  3. float 单精度,浮点数在内存中是按科学计数法来存储的,小数点后6位能确定表示,float 是由 1 bit 符号位,8 bit 指数位和 23 bit 尾数位组成,精度是由尾数位决定的(2^23 = 8388608)

    bool test(float a, float b){
        float t = (a + b) - a - b;
        cout << t << endl;
        return t == 0;
    }
    
    int main()
    {
        // 第五位及以后的数字,大于等于 8 的数字就不稳定了
        cout << test(1.12348, 2.12348) << endl;
    
        return 0;
    }
    

    输出:

    -2.38419e-07
    0
    
  4. double 双精度是由 1 bit 符号位,11 bit 指数位和 52 bit 尾数位组成

  5. IPv4 地址由 4 部分组成,每部分 8 bit,一共 32 bit,每部分用 10 进制表示,中间用 . 隔开

  6. IPv6 地址由 8 部分组成,每部分 16 bit,一共 128 bit,每部分用 16 进制表示,中间用 : 隔开