零点起飞学C之数据类型.pptx_第1页
零点起飞学C之数据类型.pptx_第2页
零点起飞学C之数据类型.pptx_第3页
零点起飞学C之数据类型.pptx_第4页
零点起飞学C之数据类型.pptx_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章数据类型 数据是能被计算机存储和处理的对象 数据类型则规定了数据的组织和操作方式 它说明了数据是怎么存储的以及怎么对数据进行操作 C 中的数据类型主要分为整型和浮点型 学习本章 读者可以了解C 处理数据的本质 2 1数据的表示 数字运算型是能够进行数学运算的数据类型 主要有整型 浮点型和双精度型 其中 整型表示整数 浮点型 双精度型表示实数 其表示范围从大到小 依次为双精度型 浮点型 整型 但是由于计算机自身的限制 无论是整型 浮点型还是双精度型都不能表示全部的整数和实数 2 1 1整型 整型就是整数类型 由于计算机存储字长的限制 整型所能表示的数的范围是数学概念下整数的子集 整型数可以用十进制 八进制 十六进制等3种进制表示 十进制由0 9的数字组成 不能以0开始 没有小数部分 如11 11 0等都是整型数 八进制以0开始 由0 7的数字组成 如011 023等 十六进制以0 x开始 由0 9的数字及A到F的字母组成 如0 x10 0 xAA 0 x1a等 根据整型字长的不同 又可以分为短整型 整型 长整型3种 短整型至少长为16位 长整型至少为32位 整型介于短整型和长整型之间 整型究竟为16位还是32位 或者是其他值 由具体的编译器来决定 通常情况下 整型的长度是该种机型最为高效的位数 整型用int表示 短整型在int前加short修饰符 长整型则加long 根据有无符号 整型还可分为有符号型和无符号型 分别用signed和unsigned来修饰 与3种整型类型相组合共有下述6种类型可用 如表2 1所示 表2 1各种整型类型的可能取值范围 通常情况下 signed修饰符可以省略不写 默认为有符号类型 当错误的为无符号型变量赋有符号的值时 有些编译器会报错 而有些则不会 但却作为可能的最大整型值处理 例如 同样是数字1 如果被定义为int型 则系统将用16位来存储 如果定义为long型 将占用32位存储空间 从可移植性角度考虑 在实际编程时 不建议直接使用表2 1中的范围值 这些值在头文件limits h中都以宏定义的形式给出 如表2 2所示 表2 2各种整型类型的宏定义 对于无符号时的最小值 该文件中没有定义 但该值很明确是0 为了防止溢出 在实际编程时 应该小心测试计算得到的数据是否在允许的范围内 这些宏定义在程序中可以作为常量直接使用 说明 在科学计算中 还常会用到longlongint和int64等整型类型 这些类型有更大的位长 因此也就可以表示更大范围的数据 2 1 2实型 实型既实数类型 日常用到的数可分为整数和实数 整数可以直接在计算机上表示 而实数则还不能直接表示 为了解决实数的表示和存储问题 在计算中采用了 浮点 化方法 不像直接用 整型 来命名整数类型 C 并没有直接用 实型 来命名实数类型 而是将其命名为 浮点型 之所以这么命名 是因为实数在机器上的表示方式叫浮点型表示 所以计算机科学中也将实数称为浮点数 假设基数为2 浮点数表示方式如下所示 N M 2E其中 M代表尾数 E代表阶码 在计算机中存储时 只需保存尾数和阶码即可 形式如下表 表 数的精度由尾数决定 数的范围由阶码决定 数的符号由尾数符号表示 按照精度来分 可分为单精度型和双精度型 示例2 1 实数13 75表示为浮点型的转换过程 1 转换为二进制表示 13 75 10 1101 11 2 2 规格化 1101 11 2 1 10111 23 2 3 浮点数表示如下表 表 实际转换和存储方式比这里讲的要复杂的多 读者可以参考相关书籍学习 这里不再赘述 这一小节的目的是让读者理解C 中的实数类型 从数学概念下的实数类型转换到计算机概念下的浮点型 接下来两小节将分别讲解浮点型的两种表示范围 单精度浮点型和双精度浮点型 2 1 3浮点型 浮点型就是单精度实数 或者叫单精度浮点数 它表示的是实数的子集 用float来说明 32位长 如果小数点前的整数部分是0 则0可以省略 但必须保留小数点 如果小数部分是0 则0不仅可以省略 还可以省略掉小数点 所以 浮点数可以有下述4种不同的表示方式 1210 1010 0其中 第1种省略掉了小数点前的0 实际为0 12 第2种省略掉了小数点后的0 实际为10 0 第3种不仅省略了小数点后的0 也省略掉了小数点 第4种是规范的写法 虽然 前3种写法都正确 但是很明显第4种的写法要清晰明确 实际编程时 建议采用第4种 此外 浮点数还可以写成指数形式 格式如下 e exp这是以10为基数的阶码表示 其中 e为尾数 exp为阶码 即指数 上式等价于下述形式 e 10 exp这属于科学计数法 示例2 2 采用科学计数法来表示3个数 a 6 3e 3 b 2 2e4 c 6 3e 错误的表示方法其中 a即为6 3 10 3 b为2 2 104 变量c的写法是错误的 因为用指数形式表示浮点数时 指数部分不能省略 2 1 4双精度型 双精度型是指双精度浮点数 它的精度 或者说可表示的数的范围比单精度浮点数要大很多 它用double来修饰 64位长 双精度浮点数的表示范围定义在float h中 分别用DBL MAX和DBL MIN表示上限和下限 双精度浮点数与单精度浮点数的差别只在所能表示的数的范围上 其表示方式是一样的 如果将2 13节中的数0 12 10 0定义为double型 那么它们将占用64位而不是32位 说明 在科学计算中 有时候还会用到另一种范围更大的实数类型 扩展精度的双精度浮点数 这种类型用longdouble来说明 但并不是所有的机器都支持 2 2是非问题 逻辑运算 逻辑运算类型是用来定义逻辑型数据的类型 用关键字bool来说明 C 中并没有提供专门的逻辑类型 而是借用其他类型来表示 用0表示逻辑假 非0表示逻辑真 C 专门定义了宏true和false来分别表示真和假 这两个宏的值其实就是1和0 逻辑类型数据是数 可以参加数的运算 但实际编程时 并不鼓励对逻辑型使用其他类型的数据来赋值和作运算 要尽量使用true和false宏定义 2 2 1与运算 逻辑型的与运算又叫逻辑与 相当于生活中的 并且 它是对两个或两个以上的逻辑类型数据进行逻辑与的运算 用符号 表示 符号两边是两个结果为逻辑型值的表达式 形式如下所示 expr1其中 expr1和expr2都是结果为逻辑型值的表达式 当expr1和expr2的值都为真时 结果为真 只要有一个表达式的结果为假 与运算的结果即为假 表2 3是与运算的真值表 表2 3与运算的真值表 实际计算时 首先计算expr1的值 当expr1的值为假时 整个运算的结果也为假 就不再需要计算expr2的值了 当exprt1的值为真时 才计算expr2的值 这时expr2的结果就是整个运算的结果 因此 其可能的计算步骤为 1 如果expr1为false 则停止计算 返回false 2 如果expr1为true 则返回expr2的值 示例2 3 假设a b都是bool型 且a的值为true b的值为false 则a和b的与运算写作如下形式 a由于a的值为true 则与运算的结果将与b相同 所以在进行与运算时 应该尽量把最可能结果为假的表达式作为expr1 以减少运算量 这种计算顺序被称为 短路求值 2 2 2或运算 或运算就是对两个或两个以上的表达式进行逻辑或运算 相当于生活中的 或者 它用符号 表示 或运算符号两边是两个值为逻辑型的表达式 其形式如下所示 expr1 expr2 其中 expr1和expr2都是结果为逻辑型值的表达式 当expr1和expr2的值都为假时 结果为假 只要有一个表达式的结果为真 或运算的结果既为真 表2 4是或运算的真值表 表2 4或运算的真值表 或运算也有短路求值的方法 先计算expr1 如果expr1为真 则不再计算expr2 整个表达式结果为真 若expr1为假 则计算expr2 结果与expr2一致 因此在使用时 尽量把最可能为真的表达式放在前面 示例2 4 假设a b都是bool型 且a的值为true b的值为false 则a和b的或运算写做如下形式 a b 由于a的值为true 所以不需要再计算b的值 因此或运算的结果与a同为true 2 2 3非运算 非运算是对逻辑型值求反的运算 相当于生活中的 非 它用符号 表示 表达式在符号的右边 属于单目运算 形式如下所示 expr 其中 expr是一个结果为逻辑型的表达式 非运算的结果与expr相反 expr为真 非运算就为假 反之 为真 表2 5是非运算的真值表 表2 5非运算的真值表 非运算就是否定原来的值 得到相反的值 所以对一个逻辑型值做两次非运算 就又得到原来的值 实际上 偶数次非运算 原值不变 相当于不作非运算 奇数次非运算 原值反转 相当于一次非运算 非运算的这个性质可以帮助简化复杂的逻辑表达式 理解复杂表达式的意思 示例2 5 假设a是bool型为true 则a的非运算写作如下形式 a 非运算对a求反 因此非运算的结果为false 注意 也许在某些材料中还会见到布尔型的叫法 它和逻辑型是一样的 是同一个类型的两种叫法 修饰符bool全写为boolean 逻辑型是其意译 布尔型是其音译 2 2 4逻辑运算的组合 在实际的应用中 往往不能单用某一种逻辑运算来解决问题 而是这些逻辑运算的有机组合 当将这些运算组合时 就能表示复杂的判断 示例2 6 假设year存放年份 则判断某年是否为闰年 可用如下复合的逻辑运算 year 4 0 year 100 0 year 400 0 该逻辑运算先做一次与运算 再做一次或运算 与运算连接两个条件表达式 这两个条件组合起来是一个充分条件 分开则分别是该充分条件的必要条件 或运算又将该充分条件与另一个充分条件year 400 0联合起来 3种逻辑运算的优先级为 非 与 或 非 的优先级高于其他两种 实际问题常常是多个条件的复杂混合 因此要特别注意优先级对表达式关系的影响 写逻辑表达式时 不要完全依赖运算符的优先级来决定结合关系 条件少时尚且可以 条件多时就变得很复杂 这时就需要使用括号来明确的标出结合关系和优先级关系 2 3文本的基础 字符型和字符串 字符型是用来表示单个字符的类型 字符串则是由多个字符型数据放在一起形成的 字符和字符串常用来存储非可运算数据 本节将详细介绍字符和字符串的概念 及其差异 2 3 1字符 字符型表示单个字符 用char来修饰 通常为8位长 形式如下所示 charvar 其中 char是字符型的说明符 var是变量名 每个变量只能容纳一个字符 每个字符用一对单引号包含起来 如 a 1 等都是字符 关于字符 需要掌握如下几个知识点 1 字符型数据的存储 字符型数据不是C 的基本数据类型 它实质上是8位的整数类型 在计算机上保存时 保存的是字符的ASCII码 而不是字符本身 使用时 则要由系统再将ASCII码转换为字符 示例2 7 演示两个字符的变量定义 charch1 a charch2 1 分析 字符 a 保存在计算机上时 保存的是它的ASCII码97 字符 1 保存的是它的ASCII码49 说明 由于字符型数据实质是整数类型 因此具有整型数据的一切性质和运算 它也可以用unsigned修饰 有带符号和不带符号两种 但是形如unsignedchar这样定义字符变量的方式 看起来实在有点儿古怪 因为定义字符型数据的本意并不是用来做计算 因此 这里没有提及这些内容 也不鼓励这么去用 2 宽字符的支持 ASCII码是8位长 不能超过256个 但是有些国家所需要的编码要多于这个数 因此C 提供了宽字符的概念 宽字符也是字符 一般为16位 能包含更多的字符 用wchar t修饰 形式如下所示 wchar tvar 其中 wchar t是修饰符 var是变量名 每个变量只能容纳一个宽字符 每个字符用一对前缀为L的单引号包含起来 如L n L 等都是宽字符 前缀L代表long 这将告诉编译器该字符按宽字符保存 既每个字符占2字节 3 转义符 转义符也称为Escape符 它表明后面的字符是特殊字符 例如 0 表示空 n 表示换行 r 表示回车等 表2 6是常见的几种转义符 表2 6转义符表 2 3 2字符串 字符串就是字符组成的串 字符串必须用双引号标注 以转义字符 0 表示串的结束 字符串必须用双引号来说明 而不是字符型的单引号 如果用双引号来说明字符串 则默认在串的末尾就存在一个转义符 0 如果用单引号来说明字符串 编译器会提示出错 例如 china C 中国 等都是字符串 而 china 中国 等则不是合法的字符串 当双引号本身也是字符串的一部分时 不能直接使用双引号 而要用转义符 将它引入 这时 作为字符串一部分的双引号写做 示例2 8 字符串 Hesaid Yeah Iknow 的实际效果 Hesaid Yeah Iknow 除了双引号外 其他符号是字符串的一部分时 都不需要加转义符 说明 本节只介绍C 语言本身对字符串的支持 C 中还专门定义了string类来支持字符串 这将在本书的高级部分进行专门讲解 2 3 3字符与字符串的差异 字符与字符串的差异比较简单 因为字符串是由一个一个的字符组合而成 它们的主要差别有以下几点 字符用单引号 标注 而字符串则用双引号 标注 字符串需要用转义符 0 来说明结束位置 而字符则不存在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论