基本类型

Tutorial: C与汇编 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. C 语言的变量类型
1. 基本类型
    整数类型
    浮点类型

2. 构造类型
    数组
    结构体
    共用体(联合)

3. 指针

4. 空类型(void)
2. 整数类型的宽度
1. char      8bit       1字节      0 ~ 0xFF
2. short     16bit      2字节      0 ~ 0xFFFF
3. int       32bit      4字节      0 ~ 0xFFFFFFFF
4. long      32bit      4字节      0 ~ 0xFFFFFFFF
5. float     32bit      4字节      0 ~ 0xFFFFFFFF
6. double    64bit      8字节      0 ~ 0xFFFFFFFFFFFFFFFF
3. 溢出
char y = 0x100 // 0001 0000 0000,高位丢弃 0000 0000
4. 有符号、无符号
  • 二者的区别
    • 在存储和赋值的时候没有任何差异
    • 拓展的时候有区别
    • 比较的时候有区别
unsigned char x = 0 ~ FF = 0 - 255
char x:
    x > 0: 0 ~ 127
    x < 0: -128 ~ -1

拓展的时候:
举例1:
    int x = -1; // 默认是有符号的
    print("%u\n", x); // 以无符号形式打印:429,496,7295 / 0xFFFFFFFF
    print("%d\n", x); // 以有符号形式打印:-1

举例2:
    unsigned int y = 0xFFFFFFFF;
    print("%d\n", y); // 以有符号形式打印:-1

举例3:
    signed char x = -1(有符号,还是负数); // 0xFF,11111111
    int y = x;
        解析:     0000 0000 0000 0000 0000 0000 0000 0000
        放进去:    0000 0000 0000 0000 0000 0000 1111 1111
        有符号:   1111 1111 1111 1111 1111 1111 1111 1111 (最终存储)

    signed char x = 127(有符号,但是正数); // 0x7F, 0111 1111
    int y = x;
        解析:     0000 0000 0000 0000 0000 0000 0000 0000
        放进去:    0000 0000 0000 0000 0000 0000 0111 1111
        正数:     0000 0000 0000 0000 0000 0000 0111 1111 (最终存储)

举例4:
    unsigned char x = -1; // 0xFF,11111111
    int y = x;
        解析:     0000 0000 0000 0000 0000 0000 0000 0000
        放进去:    0000 0000 0000 0000 0000 0000 1111 1111
        无符号:   0000 0000 0000 0000 0000 0000 1111 1111 (最终存储) = 255

比较的时候:
举例1char x = -1;
    char y = 1;
    if (x > y) ...        // -1 > 1 错误

举例2unsigned char x = -1; // 0xFF,因为是无符号会被看成是255
    unsigned char y = 1;  // 0x01
    if (x > y) ...        // 255 > 1 正确
5. 浮点类型

IEEE 754 标准的简要概述: float 类型:通常称为单精度浮点数,使用 32 位(4 字节)来存储。 符号位:1 位 指数位:8 位 尾数(或称为有效数字)位:23 位 double 类型:通常称为双精度浮点数,使用 64 位(8 字节)来存储。 符号位:1 位 指数位:11 位 尾数位:52 位

换算:指数部分/2, 小数部分*2

  • float(IEEE 规范) 31 30(符号位)--------(指数部分 8 位)22---------0(尾数部分 23 位)
  • double(IEEE 规范) 63 62(符号位)--------(指数部分 11 位)51---------0(尾数部分 52 位)
3:        float a = 12.5f;
00401028   mov         dword ptr [ebp-4],41480000h
4:        double b = 2.0;
0040102F   mov         dword ptr [ebp-0Ch],0
00401036   mov         dword ptr [ebp-8],40000000h

将十六进制的41480000h转换为二进制为01000001100100000000000000000000。在IEEE 754标准的单精度浮点数中:
第1位(最左边的位)为符号位,0表示正数。
接下来的8位为指数位,10000011,转换为十进制为131。根据IEEE 754标准,真实的指数值需要减去偏移量127,即131 - 127 = 4。
剩余的23位为尾数(分数)位,00100000000000000000000。在尾数的隐含前导位(即默认的1)后追加这些尾数位,得到1.001的二进制数,转换为十进制即1 + 0.5 = 1.5。
最后,将尾数1.5乘以2的指数4次方,得到1.5 * 2^4 = 12.5