CAPL 编程系列教程 - 第四期:简单数据类型详解

 CAPL 编程系列教程的第四期内容,接续上一期,本期详细讲解 CAPL 中的简单数据类型,包括整数、浮点数和字符类型

CAPL 编程系列教程 - 第四期:简单数据类型详解

一、 课程回顾与本期目标

  • 回顾: 上一期学习了变量定义基础和 write() 函数。
  • 本期目标: 详细讲解 CAPL 中的简单数据类型,主要分为整数、浮点数和字符三大类
  • 基础概念:
    • 计算机中数据以二进制比特(0 或 1)存储
    • 8 个比特组成一个字节(Byte),是存储的基本单位
    • 理解数据类型主要关注其占用的字节数和能表示的数据范围

二、 整数类型 (Integer Types)

  • 分类:
    • 无符号 (Unsigned): 只能表示 0 和正整数
    • 有符号 (Signed): 可以表示负数、0 和正整数
  • 无符号整数类型:
    • byte:
      • 占用 1 个字节 (8 比特)
      • 范围:0 到 255 (2^8 - 1)
      • 示例:byte b1 = 192;
    • word:
      • 占用 2 个字节 (16 比特)
      • 范围:0 到 65535 (2^16 - 1)
      • 示例:word w = 1923;
    • dword (double word):
      • 占用 4 个字节 (32 比特)
      • 范围:0 到 约 42 亿 (2^32 - 1)
    • qword (quad word):
      • 占用 8 个字节 (64 比特)
      • 范围:0 到 2^64 - 1
  • 有符号整数类型:
    • int:
      • 占用 2 个字节 (16 比特)
      • 范围:-32768 到 32767
      • 示例:int i = -3;, int i2 = 32000;
    • long:
      • 占用 4 个字节 (32 比特)
      • 范围:约 -21 亿 到 +21 亿
      • 示例:long l = 1932000; (如果用 int 定义此值会超范围)
    • int64: (未在示例代码中明确使用,但属于整数类型) 通常占用 8 个字节,用于表示更大范围的有符号整数。
  • 数据溢出与截断:
    • 常量定义: CAPL 中直接写的数字常量(如 256)默认占用 4 字节内存空间
    • 赋值截断: 当把一个超出目标变量类型范围的常量或值赋给该变量时,会发生截断 。系统只保留常量二进制表示中符合目标类型字节数的部分(通常是低位字节)
    • 示例:
      • byte b2 = 256; 256 的 4 字节二进制表示是 ...00000001 00000000byte 只占 1 字节,截取低位的 00000000,所以 b2 的值实际为 0
      • byte b3 = 300; 300 的二进制低位字节是 00101100 (十进制 44),所以 b3 的值实际为 44
    • 建议: 选择足够大的数据类型以避免溢出,不要依赖溢出截断的行为
  • 输出: 无论是无符号还是有符号整数,通常都使用 %d 占位符以十进制形式输出(除非需要 %x / %X 输出十六进制)

三、 浮点数类型 (Floating-Point Types)

  • 类型:
    • float
    • double
  • 特点:
    • 在 CAPL 中,floatdouble 功能完全一致,都占用 8 个字节
    • 用于表示带小数点的数值
    • 可以表示正数和负数
  • 精度:
    • 最高精度约为 17 位有效数字 (小数点前后的总位数)
    • 超出此精度的部分会被舍弃或不精确
    • 示例:float f02 = 12345678901234567890LL; (常量后加 LL 表示 64 位/8 字节常量) 输出时,只能精确显示约 17 位 float f03 = 1.2345678901234567890; 输出时,小数点后约 16 位是准确的
  • 应用: 车载领域中小数点后精度要求通常不高,一般够用
  • 输出: 使用 %f 占位符输出,可用 %m.nf 控制精度

四、 字符类型 (Character Type)

  • 类型: char
  • 特点:
    • 占用 1 个字节
    • 用于表示单个字符,如字母、数字、标点符号等
  • 赋值: 使用单引号 '' 将字符括起来赋值
    • 示例:char c1 = 'X';, char c2 = '9';, char c3 = '!';
  • 注意: 字符 '9' 和数字 9 是不同的。字符 '9' 只是一个符号,没有算术意义
  • 输出: 使用 %c 占位符输出

五、 总结与后续

  • 本期详细介绍了 CAPL 的简单数据类型:整数(区分有无符号及不同字节大小)、浮点数(float/double)和字符(char)。
  • 强调了数据类型与内存占用、表示范围、精度及溢出截断的关系。
  • 下一期将讲解复合数据类型,如数组等