基本数据类型及运算符原始.ppt

上传人:tia****nde 文档编号:6620145 上传时间:2020-03-01 格式:PPT 页数:40 大小:619.81KB
返回 下载 相关 举报
基本数据类型及运算符原始.ppt_第1页
第1页 / 共40页
基本数据类型及运算符原始.ppt_第2页
第2页 / 共40页
基本数据类型及运算符原始.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
基本数据类型及运算符 C语言标识符和关键字C语言的基本数据类型常量的定义和使用方法变量的定义和使用方法表达式及各种运算符的使用各种数据类型之间的相互转换位运算符的使用 C语言标识符 计算机程序处理的对象是数据 编写程序也就是描述对数据的处理过程 在程序中通过名字建立定义与使用的关系 为了这种需要 每种程序语言都规定了在程序里如何描述名字 程序语言的名字通常被称为 标识符 直接地说 标识符就是一个名字 像后面介绍的符号常量名 变量名 函数名 标号 数组名 文件名 结构类型名和其他各种用户定义的对象名都是标识符 它们的命名必须满足标识符的构成规则 C语言中允许用作标识符的字符有 26个英文字母 包括大小写 共52个 数字0 l 9下划线标识符的构成规则为 必须由字母 a z A Z 或下划线 开头后面可以跟随任意的字母 数字或下划线 在C语言中 大小写字母有不同的含义 例如 num Num NUM为三个不同的标识符 在构造标识符时 应注意做到 见名知意 即选择有含义的英文单词 或汉语拼音 作标识符 以增加程序的可读性 如表示年可以用year 表示长度可用length 表示和可以用sum等 C语言中有一些标识符被称为关键字 在系统中具有特殊用途 不能作为一般标识符使用 如用于整型变量定义的int关键字 就不能再用作变量名 有些标识符虽不是关键字 但C语言总是以固定的形式用于专门的地方 因此 用户也不要把它们当做一般标识符使用 以免造成混乱 这些常用的标识符有 define include ifdef ifndef endif elif 例如 以下均是合法的标识符 sum a1 i j5k3 sum avg以下均是不合法的标识符 5i 错在以数字开头 u s 错在出现 goodbay 错在中间有空格 在所有合法C标识符中有一个特殊的小集合 其中的标识符称为C语言的 关键字 作为关键字的每个标识符在C程序中都有语言里预先定义好的特殊意义 这些关键字不能用于任何其他目的 例如 不能用关键字为程序中自己的东西命名 C语言的关键字总共有32个 下面列出了全部关键字 autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile 基本数据类型 C语言有五种基本数据类型 字符 整型 单精度实型 双精度实型和空类型 尽管这几种类型数据的长度和范围随处理器的类型和C语言编译程序的实现而异 但以bit为例 整数与CPU字长相等 一个字符通常为一个字节 浮点值的确切格式则根据实现而定 对于多数32位的计算机 表2 1给出了五种数据的长度和范围 除void类型外 基本类型的前面可以有各种修饰符 修饰符用来改变基本类型的意义 以便更准确地适应各种情况的需求 修饰符如下 signed 有符号 unsigned 无符号 long 长型符 short 短型符 short只能修饰int 且shortint可省略为short long只能修饰int和double 修饰为longint时 可省略为long unsigned和signed只能修饰char和int 一般情况下 char和int默认为signed型 实型数float和double总是有符号的 不能用unsigned修饰 常量 在程序运行中 其值不能被改变的量称之为常量 在基本数据类型中常量分为整型常量 实型常量 符号常量和字符型常量 含字符常量和字符串常量 1 整型常量 整型常量即为整型常数 可用十进制 八进制和十六进制3种形式表示 十进制整型常量由0至9的数字组成 没有前缀 不能以0开始 没有小数部分 如 123 0 456等 八进制整型常量以0为前缀 其后由0到7的数字组成 没有小数部分 如 0123 等于十进制数的83 047 等于十进制数的39 十六进制整型常量以0 x或0X为前缀 其后由0到9的数字和A到F 大小写均可 的字母组成 没有小数部分 如 0 x123 等于十进制数的291 0X7A 等于十进制数的122 整型常量中的长整型数据可用L 或小写字母l 作后缀来表示 如 1234L 5678l等 整型常量中的无符号型数据可用U 或u 作后缀来表示 如 1234U 5678u等 如果一个整型常量的后缀是U 或u 和L 或l 或者是L和U 都表示为unsignedlong类型的常量 如 12345UL 67890ul等 2 实型 浮点型 常量 实型常量是由整数部分和小数部分组成的 它只有十进制的两种表示形式 1 定点数形式 它由数字和小数点组成 整数和小数部分可以省去一个 但不可两者都省 而且小数点不能省 如 1 234 123 123 0 0等 2 指数形式 或称科学表示法 它是在定点数形式表示法后加e 或E 和数字来表示指数 指数部分可正可负 但须为整数 且应注意字母e 或E 之前必须有数字 如 1 234e3 12 34e2均合法地代表了1 234 103 而e3 1e2 3 e3 e均不合法 另外 实型常量的后缀用F 或f 表示单精度型 而后缀用L 或l 表示长双精度型 如 0 5e2f表示单精度数 3 6e5L表示长双精度数 3 符号常量 在程序中 可以定义一个符号来代表一个常量 这种相应的符号称为符号常量 例如 用PI代表圆周率 即3 1415926 使用符号常量有许多好处 一是增加可读性 在程序中出现具有一定意义的符号常量时 一看便能帮助读者了解其含义 即见名知义 如 PI代表 NAME代表姓名等 二是提高了可维护性 使用符号常量可使修改该常量变得更加方便 例如 在程序中直接使用某个常量 且该常量在程序中多处出现 若需修改该常量时 则需在每处出现该常量的地方都要加以修改 容易漏改或改错 如果使用符号常量 则只要修改其定义处即可 即一改全改 如 程序中出现某职工的姓名 且多处需要用此姓名 若用NAME符号常量代表姓名 一旦需要改变姓名 只要修改NAME的定义处即可 在C语言中 是用预编译处理命令 define来定义符号常量 如 definePI3 1415926 defineNAME 姚木兰 这种语句的格式是在 define后面跟一个标识符和一串字符 彼此之间用空格隔开 由于它不是C语句 故语句末不用分号 当程序被编译时 它先被编译预处理 即预处理遇到 define时 就用标识符后的字符串替换程序中的所有该标识符 习惯上 符号常量标识符用大写字母写出 以示与变量名区别 另外 符号常量标识符一旦定义 就不能在其他地方给该标识符再赋值 如 PI 3 14 是错误的 字符型常量包含字符常量和字符串常量两类 1 字符常量用一对单引号括起来的一个字符称为字符常量 例如 a A 3 等 它的实际含义是该字符在内存中的编码值 常用的是以ASCII编码来表示字符 如 a 的编码值是97 A 的编码值是65 3 的编码值是51而不是数值3 除了以上形式的字符常量外 C还允许使用一种特殊形式的字符常量 即以反斜杠符 开头 后跟字符的字符序列 称之为转义字符常量 用它来表示控制及不可见的字符 见表2 2 它同样表示的是该转义字符的ASCII码值 如 n表示换行 其ASCII码值为10 a表示响铃 其ASCII码值为7等 转义字符 ddd 为八进制数字 0 7之一 将字符的ASCII码值转换为对应的字符 它表示任一个字符 例如 101 表示字符 A 012 表示转义字符 n 0 或 000 表示ASCII码为0的控制字符 即 空 字符 2 字符串常量 字符串常量是用一对双引号 括起来的零个或多个字符的序列 例如 Thisisastring 5401349 10000 00 引号中有一个空格 本书中用 表示一个空格 引号中什么也没有 a 引号中有一个转义字符 字符串常量在内存中存储时 系统自动在每个字符串常量的尾部加一个 字符串结束标志 字符 0 因此 长度为n个字符的字符串常量 在内存中要占用n 1个字节的空间 例如 hello 在内存中的形式是 104101108108111 0为了能直观理解 以后表示字符串时 直接用字符本身表示 上例表示成 hello 0 分析 程序2 2 的运行结果 文件名 chap02 2 cpp include includevoidmain char cstr China a n 101 t printf d n strlen cstr printf s n cstr 程序运行结果 10ChinaA 程序中 China a n 101 t 是一个符号常量 由字符指针cstr指向它 有关字符指针的内容在后续章节中介绍 该符号常量似乎有17个字符 事实上 它只有10个字符 分别是C h i n a a n 101 对应字符 A t和 其中有5个转义字符 字符常量A A 与字符串常量A A 的区别 定界符不同 字符常量使用单引号 而字符串常量使用双引号 长度不同 字符常量的长度固定为1 而字符串常量的长度可以是0 也可以是某个整数 存储要求不同 字符常量存储的是字符的ASCII码值 而字符串常量除了要存储有效的字符外 还要存储一个结束标志 0 在C语言中 没有专门的字符串变量 字符串常量如果需要存储在变量中 要用字符数组来解决 详细内容将在后续章节中介绍 变量 在程序运行过程中 其值可以被改变的量称为变量 变量有两个要素 变量名 每个变量都必须有一个名字 即变量名 变量命名应遵循标识符的命名规则 变量值 在程序运行过程中 变量值存储在内存中 不同类型的变量 占用的内存单元 字节 数不同 在程序中 通过变量名来引用变量的值 程序2 3 用来输出两个整数相加 相减和相乘的结果 代码如下 文件名 chap02 3 cpp includevoidmain intx y printf 请输入两个整数 中间用空格隔开 scanf d d 程序运行结果 请输入两个整数 中间用空格隔开 105 10 5 1510 5 510 5 50本程序中 x和y定义成整型变量 用于接受用户输入的值 变量的定义与初始化 在C语言中 要求对所有用到的变量必须先定义后使用 在定义变量的同时 进行赋初值的操作称为变量初始化 变量定义的格式如下 存储类型 数据类型变量名1 变量名2 例如 inti j k 定义i j k为整型变量 longm n 定义m n为长整型变量 floata b c 定义a b c为实型变量 charch1 ch2 定义ch1 ch2为字符型变量 变量初始化的一般格式如下 存储类型 数据类型变量名1 初值1 变量名2 初值2 例如 floatf1 1 23 f2 f3 该语句定义了f1 f2和f3三个实型变量 同时初始化了变量f1 表达式 以上小节介绍了数据的类型 以及常量 变量的概念和定义 那么如何处理这些数据呢 可以用代表一定运算功能的运算符将运算对象连接起来 并且以符合C的语法规则构成一个说明运算过程的式子 即表达式 来完成对数据的处理 其运算对象包括常量 变量 函数等 运算符简介 运算符是C语言里用于描述对数据进行运算的特殊符号 有了基本数据对象和运算符 就可以写出描述计算的表达式了 语言具有丰富而繁多的运算符 由它构成了各种表达式 这是其它任何程序设计语言所不可比的 其中有些运算符已超出了一般 运算符 的概念 这为编写程序带来了很大的方便性和灵活性 使程序简洁而高效 但另一方面 由于运算符丰富也会产生不便于记忆 应用难度较高等问题 初学者一定要注意运算符 表达式和运算过程的使用规则 这是编程的基本条件 TurboC 3 0的运算符非常丰富 主要分为三大类 算术运算符 关系运算符与逻辑运算符 按位运算符 除此之外 还有一些用于完成特殊任务的运算符 下面分别进行介绍 算术运算符和算术表达式 表2 3列出了C语言中允许的算术运算符 在C语言中 运算符 和 的用法与大多数计算机语言的相同 几乎可用于所有C语言内定义的数据类型 当 被用于整数或字符时 结果取整 例如 在整数除法中 10 3 3 一元减法的实际效果等于用 1乘单个操作数 即任何数值前放置减号将改变其符号 模运算符 在C语言中也同它在其它语言中的用法相同 切记 模运算取整数除法的余数 所以 不能用于float和double类型 下面的程序说明 用法的程序段 intx y x 10 y 3 printf d x y 显示3 printf d x y 显示1 整数除法的余数 x 1 y 2 printf d d x y x y 显示0 1 最后一行打印一个0和一个1 因为1 2整除时为0 余数为1 故1 2取余数1 赋值运算符和赋值表达式 赋值运算构成了 语言最基本 最常用的赋值语句 同时 语言还允许赋值运算符 与10种运算符联合使用 形成组合赋值运算 使得 程序简明而精练 1 赋值运算符赋值运算符用 表示 其功能是计算赋值运算符 右边表达式的值 并将计算结果赋给 左边的变量 例如 n 12 3 直接将实型数12 3赋给变量n c a b 将a和b进行乘法运算 所得到的结果赋给变量c 注意 赋值运算符 与数学中的等号完全不同 数学中的等号表示在该等号两边的值是相等的 而赋值运算符 是指要完成 右边表达式的运算 并将运算结果存放到 左边指定的内存变量中 可见 赋值运算符完成两类操作 一是计算 二是赋值 2 赋值表达式 赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式 它的一般形式为 变量名 表达式对赋值表达式的求解过程 计算赋值运算符右边 表达式 的值 并将计算结果赋值给赋值运算符左边的 变量 赋值表达式 变量名 表达式 的值就是赋值运算符左边 变量 的值 例如上面提到的算术表达式 a b c sqrt a b sin y sin z 写成赋值表达式为 v a b c sqrt a b sin y sin z 其中v是变量 赋值号右边是算术表达式 v的值就是这个算术表达式的值 也就是该赋值表达式的值 以下的赋值表达式表示 i 5 将常数5赋值给变量i 赋值表达式 i 5 的值就是5 a 3 5 b 计算算术表达式3 5 b的值并赋值给变量a x a b c 12 4 8 5 计算算术表达式 a b c 12 4 8 5的值并赋值给变量x 逗号运算符和逗号表达式 作为一个操作符 逗号把几个表达式串在一起 逗号操作符的左侧总是作为void 无值 这意味着其右边表达式的值变为以逗号分开的整个表达式的值 例如 x y 3 y 1 这行将3赋给y 然后将4赋给x 因为逗号操作符的优先级比赋值操作符优先级低 所以必须使用括号 实际上 逗号表示操作顺序 当它在赋值语句右边使用时 所赋的值是逗号分隔开的表中最后那个表达式的值 例如 y 10 x y y 5 25 y 执行后 x的值是5 因为y的起始值是10 减去5之后结果再除以25 得到最终结果 在某种意义上可以认为 逗号操作符和标准英语的and是同义词 类型转换 在对赋值表达式求解过程中 如果赋值运算符两边的数据类型不一致 赋值时要进行类型转换 其转换工作由 编译自动实现 转换原则是以 左边的变量类型为准 即将 右边的值转换为与 左边的变量类型一致 下面用 程序2 4 说明一下 文件名 chap02 4 cpp includevoidmain inti 5 说明整型变量i并初始化为5 floata 3 5 a1 说明实型变量a和a1并初始化a doubleb 123456789 123456789 说明双精度型变量b并初始化 charc A 说明字符变量c并初始化为 A printf i d a f b f c c n i a b c 输出i a b c的初始值 a1 i i a a b c i 整型变量i的值赋值给实型变量a1 实型变量a的值赋给整型变量i 双精度型变量b的值赋值给实型变量a 整型变量i的值赋值给字符变量c printf i d a f a1 f c c n i a a1 c 输出i a a1 c赋值以后的值 YourTopicGoesHere 运行该程序的输出结果如下 i 5 a 3 500000 b 123456789 123457 c Ai 3 a 123456792 000000 a1 5 000000 c 心形字符 由以上运行结果可见 将float型数据赋值给int型变量时 先将float型数据舍去其小数部分 然后再赋值给int型变量 int型数据赋给float型变量时 先将int型数据转换为float型数据 并以浮点数的形式存储到变量中 其值不变 double型实数赋给float型变量时 先截取double型实数的前7位有效数字 然后再赋值给float型变量 int型数据赋值给char型变量时 由于int型数据用两个字节表示 而char型数据只用一个字节表示 所以先截取int型数据的低8位 然后赋值给char型变量 位运算 C语言和其它高级语言不同的是它完全支持按位运算符 这与汇编语言的位操作有些相似 表2 4列举了一些为运算符 如下示 以上位运算符中除 以外 均为二目运算符 即要求两侧各有一个运算对象 1 按位求反 运算 是一个单目运算符 用来对一个二进制数按位求反 即将0变1 1变0 例如 025是对八进制数25 即二进制数00010101 按位求反 0000000000010101 1111111111101010即八进制数177752 因此 025的值为八进制数177752 并非 025 2 左移 运算 左移 运算符是双目运算符 用来将一个数的各二进位全部左移若干位 运算符左边是移位对象 右边是整型表达式 代表左移的位数 左移时 右端 低位 补0 左端 高位 移出的部分舍弃 例如 inta 025 a a 2 将a的二进制数左移2位 右补0 20000000000010101 0000000001010100即八进制数54 因此 025 2的值为八进制数54 3 右移 运算 右移运算符的使用方法与左移运算符一样 所不同的是移位方向相反 右移时 右端 低位 移出的二进制数舍弃 左端 高位 移入的二进制数分两种情况 对于无符号整数和正整数 高位补0 对于负整数 高位补1 例如 inta 025 a a 2 将a的二进制数右移2位 由于a为正整数 左补0 20000000000010101 0000000000000101即八进制数5 因此 025 2的值为八进制数5 4 按位与 运算 按位与运算的规则是 参加运算的两个数据 按二进位进行 与 运算 如果两个相应的二进位都为1 则该位的结果值为1 否则为0 即 0 0 0 0 l 0 1 0 0 1 1 1 例如 表达式12 10的运算如下 120000000000001100 100000000000001010 80000000000001000即十进制数8 分析以上运算结果可知 按位与运算具有以下特征 任何位上的二进制数 只要和0进行与运算 该位即被屏蔽 清零 和1进行与运算 该位保留原值不变 利用这一特征可以实现如下功能 1 清零 如果想将一个单元清零 也就是使其全部二进位为0 只需与0进行按位与运算 即可达到清零目的 2 取一个数中某些指定位 如有一个整数a 2个字节 想要其中的低字节 只需将a与八进制数377 0000000011111111 按位与即可 如果想取两个字节中的高字节 只需将a与八进制数177400 1111111100000000 按位与即可 3 要想将哪一位保留下来 就与一个数进行 运算 此数在该位取1 例如有一个数01010100 十进制数84 想把其中左面第3 4 5 7 8位保留下来 设计一个数 其左面第3 4 5 7 8位为1 其他位为0 即为十进制数59 将这两个数进行按位与即可 5 按位异或 运算 按位异或的运算规则是 参与运算的两个运算数中相对应的二进制位上同号 则结果为0 异号则为1 即 0 0 0 0 1 1 1 0 1 1 1 0 例如 12 10 120000000000001100 100000000000001010 60000000000000110即十进制数6 按位异或运算有如下应用 1 使特定位翻转假设有01111010 想使其低4位翻转 即1变为0 0变为1 可以将它与00001111进行按位异或运算 结果为01110101 结果值的低4位正好是原数低4位的翻转 要使哪几位翻转就将与其进行按位异或运算的该几位置为1即可 这是因为原数中值为1的位与1进行按位异或运算得0 原数中的位值0与1进行按位异或运算的结果得1 2 与0按位异或 保留原值 3 交换两个值 不用临时变量假设要想交换a b之值 可以用以下赋值语句实现 a a b b b a a a b 因为a a b 假设a和b最初的值加上下划线 则 b b a b a b a b b a 0 aa a b a b a a a b 0 b b 6 按位或 运算 按位或运算的规则是 参加运算的两个数据 按二进位进行 或 运算 如果两个相应的二进位都为0 则该位的结果值为0 否则为1 即 0 0 0 0 l 1 1 0 1 1 1 1 例如 表达式12 10的运算如下 120000000000001100 100000000000001010 140000000000001110即十进制数14 分析以上运算结果可知 按位或运算具有以下特征 任何位上的二进制数 只要和1进行或运算 该位即为1 和0进行或运算 该位保留原值不变 例如 a是一个整数 16位 a a 0377 使a的低8位全置为1 高8位保留原样 7 位运算赋值运算符 位运算符与赋值运算符可以组成复合赋值运算符 这样的复合赋值运算符如表2 5所列 表2 5复合赋值运算符 8 不同长度的数据进行位运算位运算的运算数可以是整型和字符型数据 如果两个运算数类型不同时位数亦会不同 遇到这种情况 系统将自动进行如下处理 1 先将两个运算数右端对齐 2 再将位数短的一个运算数往高位扩充 即无符号数和正整数左侧用0补全 负数左侧用1补全 然后对位数相等的这两个运算数 按位进行位运算 程序2 5 编写一个程序 实现无符号16位数的循环左移n位 采用unsignedshort类型存放无符号16位数 C语言中只有左 右移位 而没有循环移位功能 左移和循环左移的区别在于对从左边 高端 移出的n位数的处理上 左移时 移出的n位数被丢弃 循环左移时 移出的n位数应依次放在右边 低端 的n位上 为将无符号16位数d达到循环左移的目的 实现过程如下 1 先将d高端的n位数通过 右移 操作移至低端的n位上 高端全为0 把结果存入中间变量a中 2 再通过 左移 运算将d左移n位 低端移入的全为0 把结果存入另一中间变量b中 3 最后利用按位或运算将这两个中间变量中的内容 拼装 在一起 完全循环左移功能 将循环左移功能设计成leftmove 函数 对应的程序如下 文件名 chap02 5 cpp includevoidleftmove unsignedshort d intn unsignedshorta b a d 16 n b d n d a b voidmain unsignedshortd d 0 x6271 leftmove 程序运行结果 2716
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!