C语言-基本数据类型、运算符与表达式.ppt

上传人:max****ui 文档编号:8291265 上传时间:2020-03-28 格式:PPT 页数:52 大小:1.40MB
返回 下载 相关 举报
C语言-基本数据类型、运算符与表达式.ppt_第1页
第1页 / 共52页
C语言-基本数据类型、运算符与表达式.ppt_第2页
第2页 / 共52页
C语言-基本数据类型、运算符与表达式.ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
程序是解决某种问题的一组指令的有序集合 著名计算机科学家沃思 NikiklausWirth 提出一个公式 程序 数据结构 算法 程序是什么 对数据的描述 在C语言中 体现为数据类型的描述 对数据处理的描述 是为解决一个问题而采取的方法和步骤 是程序的灵魂 结论 学好C语言首先就必须十分了解C语言的数据类型 与算符与表达式 掌握变量和常量的概念 理解各种类型的数据在内存中的存放形式 掌握各种类型数据的常量的使用方法 掌握各种整型 字符型 浮点型变量的定义和引用方法 了解调用printf函数输出各种类型数据的方法 掌握数据类型转换的规则以及强制数据类型转换的方法 掌握赋值运算符 算术运算符 位运算符 逗号运算符以及sizeof的使用方法 理解运算符的优先级和结合性的概念 记住所学的各种运算符的优先级关系和结合性 学习目标 2 1C语言数据类型 数据类型决定 1 数据占内存字节数2 数据取值范围3 其上可进行的操作 本章所介绍的数据类型 2 2常量 变量和标识符1 标识符定义 用来标识变量 常量 函数等的字符序列组成 只能由字母 数字 下划线组成 且第一个字母必须是字母或下划线C语言的关键字不能用作变量名大小写敏感长度 有效长度为32个字符 随系统而异 但至少前8个字符有效命名原则 变量名和函数名中的英文字母一般用小写 以增加可读性见名知意不宜混淆如l与I o与0 在TC2 0及BC3 1中 变量名 标识符 的有效长度为 个字符 缺省值为 但在VC中其长度可达到255 例 判断下列标识符号合法性sumSumM D JohndayDate3daysstudent name 33lotus 1 2 3chara b above 123 M D John 3days 33 char 123 a b 字符非法 数字3不可作首字符 字符非法 char是关键字 字符非法 不可作首字符 2 2常量 变量和标识符2 常量定义 程序运行时其值不能改变的量 即常数 常量的分类 直接常量 值常量 整型常量 10 15 10 30实型常量 12 5 30 0 1 5字符常量 A b c 字符串常量 sum A 123 符号常量用标识符来代表常量 其定义格式为 define符号常量常量 defineNUM20 definePI3 1415926 include definePRICE30voidmain intnum total num 10 total num PRICE printf total d total 运行结果 total 300 行尾不能有分号define前面一定要有 符号常量名最好使用大写符号常量名最好有意义 2 2常量 变量和标识符3 变量定义 程序运行时其值可以被改变的量变量的两要素 变量名 变量值变量的定义格式 变量的初始化 定义时赋初始值变量的使用 先定义 后赋值变量定义位置 一般放在函数开头 存储类型 数据类型变量名1 变量名2 变量名n intx y z floatradius length area charch 决定分配字节数和数的表示范围 合法标识符 例 inta 2 b c 4 floatdata 3 67 charch A intx 1 y 1 z 1 intx y z 1 例1 intstudent stadent 19 Undefinedsymbol statent infunctionmain 例2 floata b c c a b Illegaluseoffloatingpointinfunctionmain 2 3简单数据类型与表示范围 1 整型数据 整型常量 十进制整数 由数字0 9和正负号表示 如 123 456 0八进制整数 由数字0开头 后跟数字0 7表示 如 0123 011十六进制整数 由0 x或0X开头 后跟0 9 a f A F表示 如0 x123 0Xff 定义整数的符号常量 defineNUM120 十进制数20 defineNUM2020 八进制数 十进制16 defineNUM30 x2a 十六进制数 十进制42 思考题 下列整型常量哪些是非法的 012 oX7A 00 078 0 x5Ac 0 xFFFF 0034 7B 首字符不能是字母o 八进制数中不能有数字8 十进制数中不能有字母B 2 整数在内存中的表示 整数的数值在内存中用补码的形式存放 求一个整数补码的方法 假设用n个二进制位的内存单元来存储它 如果是正整数 采用符号 绝对值表示 即最高有效位 符号位 为0表示正 数的其余部分则表示数的绝对值 如果是负整数 则先写出与该负数相对应的正数的补码表示 然后将其按位求反 最后在末位 最低位 加1 然后将上述求得的补码的低n位存放于内存单元之中 就得到了该整数在内存中的表示 内存单元的最高位是符号位 0表示正 1表示负 在TC2 0或BC3 1下 一个整数默认情况下需要2个字节 16位 的内存单元存放 而在VC6 0下 则需要4个字节 32位 2 整数在内存中的表示 十进制整数 14 对于16位的内存单元 符号位 十进制数 14两个字节的内存实际存放形式 14 补 0000000000001110 2 整数在内存中的表示 十进制整数 14 对于32位的内存单元 十进制数 14四个字节的内存实际存放形式 14 补 00000000000000000000000000001110 符号位 记住 数据在内存中的存放位置是高字节放在高地址的存储单元中 低字节放在低地址的存储单元中 对于负数 14 对于16位的内存单元 符号位 十进制数 14两个字节的内存实际存放形式 14 补 0000000000001110 14 补 1111111111110010 2 整数在内存中的表示 十进制整数 14 对于32位的内存单元 十进制数 14四个字节的内存实际存放形式 14 补 00000000000000000000000000001110 符号位 14 补 11111111111111111111111111110010 2 整数在内存中的表示 对于较大的整数 65537 64K 65536 对于16位的内存单元 65537 补 010000000000000001 65537 补 101111111111111111 十进制数 65537两个字节的内存实际存放形式 符号位 真值为 1 不是 65537 2 整数在内存中的表示 十进制整数 65537 对于32位的内存单元 十进制数 65537四个字节的内存实际存放形式 65537 补 00000000000000010000000000000001 符号位 表示负 65537 补 11111111111111101111111111111111 真值为 65537 为什么 65537这个数在16位内存单元中的表示与在32位内存单元中的表示不相同呢 这主要是因为 65537这个数超出了16位内存单元表示数的范围 所以实际存储的值 1 与要表示的值 65537 不同 但 32767并没有超出了32位内存单元表示数的范围 所以实际存储的值就是其本身 因此 我们在C语言中对数据处理时必须要注意数据的表示范围 以免引起不必要的错误 2 整数在内存中的表示 八进制整数 034 对于16位的内存单元 034 011100 2 符号位 八进制数034两个字节的内存实际存放形式 034 补 0000000000011100 对于32位的内存单元 034 补 00000000000000000000000000011100 八进制数034四个字节的内存实际存放形式 符号位 2 整数在内存中的表示 八进制整数 034 对于16位的内存单元 符号位 八进制数 034两个字节的内存实际存放形式 034 补 0000000000011100 034 补 1111111111100100 对于32位的内存单元 034 补 00000000000000000000000000011100 034 补 11111111111111111111111111100100 八进制数 034四个字节的内存实际存放形式 符号位 2 整数在内存中的表示 十六进制整数 0X8AB6 对于16位的内存单元 0X8AB6 1000101010110110 2 符号位表示负 十六进制数0X8AB6两个字节的内存实际存放形式 0X8AB6 补 01000101010110110 真值为 30026 对于32位的内存单元 0X8AB6 补 00000000000000001000101010110110 十六进制数0X8AB6四个字节的内存实际存放形式 符号位 真值为 35510 2 整数在内存中的表示 十六进制整数 0X8AB6 对于16位的内存单元 0X8AB6 补 01000101010110110 0X8AB6 补 10111010101001010 十六进制数 0X8AB6两个字节的内存实际存放形式 符号位表示正 真值为 30026 对于32位的内存单元 0X8AB6 补 00000000000000001000101010110110 0X8AB6 补 11111111111111110111010101001010 十六进制数 0X8AB6四个字节的内存实际存放形式 符号位表示负 真值为 35510 3 整型变量 整型变量的定义 int变量名 变量名2 变量名n int必须小写 至少一个空格 必须为合法的标识符 以逗号 分隔 以分号 结尾 定义时可以赋初值 方法 在变量名后面增加 数值 例 inta intx y z intm 2 y 3 当程序中定义了一个变量时 计算机会为这个变量分配一个相应大小的内存单元 因此 这个变量是有值的 它的值就是对应内存单元的值 如果定义时没有赋初值 则这个值程序员是无法预知的 整型变量的分类 修饰符控制变量是否有符号 signed 有符号 和unsigned 无符号 控制整型变量的值域范围 short 短 和long 长 有符号基本型 int inta 2 定义一个有符号整型变量a 并赋初值 2占一个机器字大小的内存单元 TC或BC3 1下 变量占2个字节 16位 的内存单元 VC6 0下 变量占4个字节 32位 的内存单元 如果定义变量时 不指定signed 也不指定unsigned 则默认为signed 有符号 符号位 变量a占用的内存单元 2字节 有符号整型变量在内存中的实际存放形式 假设在BC3 1下 无符号基本型 unsignedint或unsigned unsignedinta 2 定义一个无符号整型变量a 并赋初值2或unsigneda 2 占用的内存单元字节数同int类型 与inta 2 等价 unsignedinta 2 定义一个无符号整型变量a 并赋初值 2或unsigneda 2 无符号整型变量在内存中的实际存放形式 假设在BC3 1下 数据位 变量a占用的内存单元 2字节 其值为 65534 注意 对于有符号数也好还是无符号数也好 其实在计算机内存中表示是不加区分的 都是以其补码形式表示 只是我们怎样看待最高二进制位的问题 如果把最高位当成符号位看待 则为有符号数 如果把最高位当成数据位看待 则变为无符号数 例如 unsignedinta 2 printf d a 有符号输出 则为 2printf u a 无符号输出 则为65534 有符号短整型 shortint或short shortinta 2 定义一个有符号短整型变量a 并赋初值2或shorta 2 占用的内存单元为2个字节 无论是TC BC 还是VC 无符号短整型 unsignedshortint或unsignedshort unsignedshortinta 2 定义一个无符号短整型变量a 并赋初值2或unsignedshorta 2 占用的内存单元字节数同short类型 在TC2 0和BC3 1下 unsignedshort类型与unsignedint类型是等价的 有符号长整型 longint或long longinta 234567 定义一个有符号长整型变量a 并赋初值234567或longa 234567 占用的内存单元为4个字节 无论是TC BC 还是VC 无符号长整型 unsignedlongint或unsignedlong unsignedlonginta 2 定义一个无符号长整型变量a 并赋初值2或unsignedlonga 2 占用的内存单元字节数同long类型 在VC中long与int类型基本相同 均占四个字节的内存单元 但在TC或BC中 long类型与int类型只是所占字节不同外 long占4字节 int占2字节 其它数据处理方法是一样的 例 各种整型变量的定义 include defineSUM65535voidmain inta b 20 unsignedintc 0 xff longD a SUM D 301 printf a d n a printf b d n b printf c d n c printf D d n D 文件包含 头文件说明 定义符号常量SUM 值为65535 定义两个int型变量a和b b赋初值20 定义无符号整型变量c 并赋初值0 xff 定义长整型变量D 对a赋值为SUM 这时a的值是65535 对D赋值为301 以有符号十进制形式 d 显示a的值 以有符号十进制形式 d 显示b的值 以有符号十进制形式 d 显示c的值 以有符号十进制形式 d 显示D的值 变量定义部分 语句执行部分 在BC3 1下运行结果 a 1b 20c 255D 301 在VC6 0下运行结果 a 65535b 20c 255D 301 对于16位的有符号整型变量a来说 因65535在内存中的形式为1111111111111111 最高位为1表示负 则其所对应的十进制数就为 1 4 整数常量的分类 根据其值所在范围确定其数据类型 在TC2 0或BC3 1下 如果整型常量的值位于 32768 32767之间 C语言认为它是int型常量 如果整型常量的值位于 2147483648 2147483647之间 C语言认为它是long型常量 整型常量后加字母l或L 认为它是longint型常量 比如123L 45l 0XAFL 无符号数也可用后缀表示 整型常数的无符号数的后缀为U或u 例如 358u 0 x38Au 235Lu均为无符号数 前缀 后缀可同时使用以表示各种类型的数 如0XA5Lu表示十六进制无符号长整数A5 其十进制为165 其实整型常数这种表示无符号数意义不大 在机器内部它还是用其补码表示 例如 1U和 1在内存中表示是一样的 数据处理也一样 所以有的教科书上说 常量无unsigned类型 其实有 但无意义 5 实型数据 实型常量 实数或浮点数 十进制小数形式 由数字0 9和小数点组成 如 0 0 5 6 5 指数形式 由十进制数 加阶码标志e或E以及阶码 只能为整数 可以带符号 组成 其一般形式为 aEn其中 a为十进制数 n为十进制整数 都不可缺少 其可表示为a 10n 合法的实数表示 2 1E5表示2 1 105 3 7E 2表示3 7 10 2 非法的实数表示 345 无小数点 E7 阶码标志E之前无数字 5 无阶码标志 50 E3 负号位置不对 实型变量 单精度实型 float floatf 3 14 g 这种定义的变量在内存中占4个字节 32位 的存储单元 双精度实型 double doublex y 这种定义的变量在内存中占8个字节 64位 的存储单元 长双精度实型 longdouble longdoublex y 在TC或BC下 这种定义的变量在内存中占10个字节 80位 的存储单元 在VC下则占8个字节 64位 注意 三种实数类型中 其精度是float double longdouble longfloat实际上就是double 因此 没有longfloat类型 所有的实型常量按照double类型处理 5 实型数据 实型数据的精度 includevoidmain floata 定义float型变量adoubleb c 定义double型变量b和ca 123 456789 对变量a赋值为123 456789b a 将变量a赋给变量bc 123 456789 对变量c赋值为123 456789printf a fb lfc lf n a b c 123 456787 123 456787 123 456789 a 123 456787b 123 456787c 123 456789 float型变量最多只能精确表示8个数字 因此显示a的值时 只能有效显示前面8个数字即123 45678 最后追加一位数字7是随机的 6 字符型数据和字符串常量 字符型常量 定义 用单引号括起来的单个普通字符或转义字符 如 a A n 101 字符常量的值 该字符的ASCII码值 如 A 65 a 97 0 48 n 10 转义字符 反斜线后面跟一个字符或一个代码值表示 如 101 A 012 n 376 x61 a 60 0 483 例 A 101 x41 65 例 转义字符举例 includevoidmain printf 101 x42C n printf Isay Howareyou n printf CProgram n printf Visual C 运行结果 屏幕显示 ABCIsay Howareyou CProgram Visual C 例 voidmain printf Y b n 运行结果 屏幕显示 打印机输出 字符串常量定义 用双引号 括起来的字符序列存储 每个字符串尾自动加一个 0 作为字符串结束标志 例1 字符串 HELLO 在内存中 例2 空串 0 字符常量与字符串常量不同 例 charch ch A 例 charch ch A 字符型变量字符型数据类型符是char 字符character 在内存中占1个字节 8位 字符变量存放字符ASCII码char与int数据间可进行算术运算存在有符号和无符号之分 默认情况下为有符号 例 charch unsignedcharC B 例 a D a 68 x A 5 x 65 5 s G s 33 71 没有字符串变量 用字符数组存放 7 简单数据类型的表示范围 符号位 十六位整型数所表示的数据范围 数据位 例 变量的存储范围 includevoidmain charch intx ch 80 50 x 80 50 printf ch d n ch printf x d n x ch 126x 130 为什么 十进制数对应的机器数 补码 800000000001010000ch 500000000000110010 0000000010000010 10000010 符号位 真值 126 8 简单的数据输出 C语言中没有用于输出的语句 只能通过标准库函数的调用来完成数据的输出任务 库函数的一般调用格式为 函数名 参数1 参数2 参数n printf函数 例 printf Howareyou 输出 Howareyou 例 inta 100 printf variablea d a 输出 variablea 100 d 用于显示有符号整型数据 如int short型数据 u 用于显示无符号整型数据 如unsignedint unsignedshort型数据 f 用于显示实型数据 如float型数据 c 用于显示字符型数据 如char型数据 s 用于显示字符串数据 格式控制符 例 简单的数据输出 includevoidmain inta b unsignedintu longL charch floatf a 200 b 1 u b L u ch A f 32 17 printf a d t a printf b d n b printf u u t u printf L ld n L printf f f n f printf chis candvalueis d n ch ch printf IloveClanguage rYou n I后有三个空格 在VC下 a 200b 1u 4294967295L 1f 32 169998chisAandvalueis65YouloveClanguage 在BC下 a 200b 1u 65535L 65535f 32 169998chisAandvalueis65YouloveClanguage b的值是 1 在内存中表示为 0 xffff BC下 0 xffffffff VC下 当它赋给u时 由于u是无符号数 因此u的值是65535 BC下 4294967295 VC下 L是有符号长整型 u是无符号整型 在BC下 L占4字节 u占2字节 当把u赋值给L时 L的高2个字节为全0 因u无符号 故L的值为0 x0000ffff 即65535 但在VC下 L和u都占4字节 当把u赋值给L时 L的值为0 xffffffff 即 1 2 4C语言的运算符与表达式 变量用来存放数据 运算符则用来处理数据 用运算符将变量和常量连接起来的符合C语法规则的式子被称为表达式 运算符的分类 单目运算符 只带一个操作数的运算符 如 运算符 双目运算符 带两个操作数的运算符 如 运算符 三目运算符 带三个操作数的运算符 如 运算符 学习运算符时应注意 运算符的功能 该运算符主要用于做什么运算 与运算量关系 要求运算量的个数及运算量的类型 运算符的优先级 表达式中包含多个不同运算符时运算符运算的先后次序 运算符的结合性 同级别运算符的运算顺序 指左结合性还是右结合性 运算结果的类型 表达式运算后最终所得到的值的类型 1 赋值运算符 赋值表达式 赋值运算符 双目运算符 一般形式 变量 常量或变量或表达式 功能 将右边常量或变量或表达式的值赋给左边变量 例如 intx y z x 20 y x z x y 赋值表达式 定义 由赋值运算符或复合赋值运算符 后面即将介绍 将一个变量和一个表达式连接起来的表达式 称为赋值表达式 一般格式 变量 复合 赋值运算符表达式 赋值表达式的值 被赋值变量的值 例如 a 5 这个赋值表达式 变量a的值 就是它的值 赋值语句 例如 x 8 a b c 5 定义 赋值表达式在其后面加分号就构成了赋值语句 赋值运算符及赋值表达式的使用 多个变量连续赋值 例如 a b c 10 a b c 10 结果 a b c的值都为10 赋值表达式的嵌套 例如 a b 2 c 3 a b 2 c 3 结果 b为2 c为3 a为b c即5 注意 赋值语句 左边必须是变量名或对应某特定内存单元的表达式 后面的章节会遇到这样的表达式 不能是常量或其它表达式 例如 30 a b 2 5 都是错误的 赋值语句中的 表示赋值 不是代数中相等的意思 要表示相等的意思则应用关系运算符 表示 二者切勿混淆 2 强制类型转换符 C语言的数据类型是可以相互转换的 转换的方法有两种 一种是自动转换 一种是强制转换 自动转换 例如 inta 2 5 则a的值将是2 而不是2 5 这种自动改变等号右边表达式值的数据类型的操作称为数据类型的自动转换 首先将等号右边的表达式的值转换成 左边的数据类型 然后再赋值给等号左边的变量 1 短长度的数据类型 长长度的数据类型 方法 直接将无符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分 长长度的数据类型数据的高位部分补零 无符号短长度的数据类型 无符号或有符号长长度的数据类型 xx x 无符号短长度的数据类型 0 0 0 高位部分补0 例如 unsignedcharch 0 xfc unsignedinta 0 xff00 假设int数据为16位intb unsignedlongu b ch b的值将是0 x00fcu a u的值将是0 x0000ff00 如果将ch的值赋给 4 问b的值又是多少呢 0 x00fc 2 强制类型转换符 自动转换 1 短长度的数据类型 长长度的数据类型 方法 直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分 然后将低位部分的最高位 即有符号短长度数据的符号位 向长长度的数据类型数据的高位部分扩展 有符号短长度的数据类型 无符号或有符号长长度的数据类型 zx x 有符号短长度的数据类型 z 符号位向高位部分扩展 z z 符号位 例如 charch 2 inta 2 intb unsignedlongu b ch b的值将是2u a u的值将是0 xfffffffe 2 强制类型转换符 自动转换 2 长长度的数据类型 短长度的数据类型 方法 直接截取长长度的数据类型数据的低位部分 长度为短长度的数据类型的长度 作为短长度数据类型的数据 例如 inta 32768 假设int数据为16位unsignedlongb 0 xffffaa00 charch intc ch a ch的值将是0c b c的值将是0 xaa00 3 长度相同的数据类型转换 方法 数据按照原样复制即可 例如 inta 0 xff00 unsignedintb a b的值将是0 xff00 2 强制类型转换符 强制转换 强制类型转换是通过类型转换运算来实现的 其一般形式为 类型说明符 表达式 功能 把表达式的运算结果强制转换成类型说明符所表示的类型 其中 类型说明符 是强制类型转换符 它的优先级比较高 例 floatx 3 5 y 2 1 z inta a int x y 结果为5z int x y 结果为5 100000z double 3 2 结果为1 000000a int 3 6 结果为3 精度损失问题 注意 在使用强制转换时应注意以下问题 类型说明符和表达式都必须加括号 单个变量可以不加括号 例如 把 int x y 写成 int x y则成了把x转换成int型之后再与y相加了 无论是强制转换或是自动转换 都只是为了本次运算的需要而对变量的数据长度进行的临时性转换 而不改变数据说明时对该变量定义的类型 例如 double a只是将变量a的值转换成一个double型的中间量 其数据类型并未转换成double型 基本算术运算符 结合方向 从左向右优先级 2 3 4 说明 可为单目运算符时 右结合性两整数相除 结果为整数 要求两侧均为整型数据 例 5 2 5 2 0 例 5 2 5 2 1 10 5 1 5 5 2 3 算术运算符 算术表达式 2 2 5 1 1 1 0 表达式和算术表达式 3 算术运算符 算术表达式 表达式 用运算符和括号将运算对象 常量 变量和函数等 连接起来的 符合 语言语法规则的式子 算术表达式 表达式中的运算符都是算术运算符的表达式 运算符优先级 到目前为止 例 3 5 8 x y 2 1等 自增 自减运算符 作用 使变量值加1或减1种类 前置 i i 先执行i i 1或i i 1 再使用i值 后置i i 先使用i值 再执行i i 1或i i 1 例 j 3 k j j 3 k j j 3 printf d j j 3 printf d j a 3 b 5 c a b a 3 b 5 c a b k 4 j 4 k 3 j 4 4 3 c 20 a 4 c 15 a 4 4 自增自减运算符 符号运算符 负号运算符 减号 既是一个算术运算符 又是一个负号运算符 负号运算符是单目运算符 例如 a 2 那么 a的值就是 2 负号运算符的优先级比较高 与强制类型转换符是同一个级别 自增 自减运算符注意事项 和 运算符只能用于变量 不能用于常量和表达式 因为 和 蕴含着赋值操作 例如 5 a b 都是非法的表达式 负号运算符 和强制类型转换运算符的优先级相同 当这些运算符连用时 按照从右向左的顺序计算 即具有右结合性 两个 和 之间不能有空格 在表达式中 连续使同一变量进行自增或自减运算时 很容易出错 所以最好避免这种用法 例如 i 是非法的 自增 自减运算 常用于循环语句中 使循环控制变变量加 或减 以及指针变量中 使指针指向下 或上 一个地址 4 自增自减运算符 符号运算符 例 intp i 2 j 3 p i p i p i j p i j p i j p i j p i j p i j p i i p i p i i p i 2 3 5 3 3 4 2 2 4 3 2 4 4 4 8 5 算术运算符中数据类型转换规则 includevoidmain floata b c a 7 2 计算7 2得int型值3 因此a的值为3 0b 7 2 1 0 计算7 2得int型值3 再与1 0相乘 因此b的值为3 0c 1 0 7 2 先计算1 0 7得double型的结果7 0 然后再计算7 0 2 因此c的值是3 5printf a f b f c f a b c a 3 000000 b 3 000000 c 3 500000 6 位运算符 位运算表达式 位运算符 按位与 按位或 按位取反 按位异或 左移 六种 左移 实现将某变量所对应的二进制数往左移位 溢出的最高位被丢掉 空出的低位用零填补 其一般格式为 返回整型值的表达式 返回整型值的表达式 例 inta 3 a 2 将a所对应的二进制数左移两位 该表达式的值为12 2 a 将2所对应的二进制数左移三位 a的值 该表达式的值为16 右移 右移运算实现将某变量所对应的二进制数往右移位 溢出的最低位被丢掉 如果变量是无符号数 空出的高位用零填补 如果变量是有符号数 空出的高位用原来的符号位填补 即负数填1 正数填0 其一般格式为 返回整型值的表达式 返回整型值的表达式 例 inta 8 a 2 将a所对应的二进制数右移两位 该表达式的值为2 例 将short类型数据的高 低位字节互换 includevoidmain shorta 0 xf245 b c b a 8 将a的高8位移到低8位赋值给c c的值为0 xfff2c c a 0 x45f2 位运算之间的优先级 7 逗号运算符 逗号表达式 位运算符 逗号表达式 用逗号连接起来的表达式 其一般形式为 表达式1 表达式2 表达式k 优先级 优先级最低 结合性 左结合性 即逗号表达式的求值顺序是从左向右依此计算用逗号分隔的各表达式的值 逗号表达式的值 最后一个表达式的值就是整个逗号表达式的值 用途 常用于循环for语句中 例如 a 3 b 4 b 例 a 3 5 a 4a 3 5 a 4 a 5例 x a 3 6 3 x a 3 6 a例 a 1 b 2 c 3 printf d d d a b c printf d d d a b c b c a 15 表达式值60 a 15 表达式值20 赋值表达式 表达式值18 x 18 逗号表达式 表达式值18 x 3 1 2 3 3 2 3 例 includevoidmain intx y 7 floatz 4 x y y 6 y z printf x d n x 运行结果 x 3 8 sizeof运算符 复合运算符 sizeof运算符功能 获取变量和数据类型所占内存大小 字节数 格式 sizeof表达式sizeof 数据类型名或表达式 例 sizeof int 其值为2 在TC2 0或BC3 1下 其值为4 在VC6 0下 sizeof long 其值是4sizeof10L其值也是4unsignedlonga 2 sizeof a 其值也是4 复合赋值运算符 种类 含义 exp1op exp2 exp1 exp1opexp2 定义 将算术运算符 位运算符与赋值运算符组合在一起就构成了复合赋值运算符 复合赋值运算符即包含了算术运算或位运算 又包含了赋值操作 例 a 12 a a a a a 264等价于a a a a a a 例 inta 2 a 4 1 a a a a 3 a 0等价于a a a a a a a a 3 2 5运算符的优先级和结合性 判断表达式0XF0F0 0X1010 0X0A0A 5 2的值 0XF0F0 0X1010 0X0A0A 5 2 2 0X1A1A 0X6868 0XF0F0 0X6060 的优先级最高 的优先级比 高 的优先级比 高 C语言编程习惯 1 一行只放一条语句 2 养成随时给程序加注释的习惯 3 程序的书写要有层次感 该缩进的一定要缩进 4 编写函数时 变量定义部分和函数的执行部分之间增加一空行 或者在程序的执行部分按照完成的功能块增加相应的空行 会增加程序的易读性 5 为变量起有意义的名字 既可以帮助程序员读懂程序 也可以避免变量的重复乱用 导致程序的逻辑错误 6 在运算符和赋值符的两边加上一个空格会增加程序的易读性 本章小结 习题 P70 P731 2 本章所介绍的主要内容是整型数据 实型数据和字符型数据的常量表示法和变量定义格式 以及可以作用于这些数据类型的运算符 虽然本章的内容比较烦杂 学起来也许比较枯燥 但本章的内容是学好C语言的基础 是每个C语言程序员必须熟练掌握的 现在我们一起来回忆一下本章有哪些内容值得我们特别留意和必须深刻领会的呢 变量的含义数据在内存中的表示形式不同类型的数据在内存中的表示范围转义字符有符号数与无符号数的区别数据类型的自动转换与强制类型转换各种运算符 运算符的优先级和结合性
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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