好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第二章数据类型、运算符与表达式.ppt

89页
  • 卖家[上传人]:桔****
  • 文档编号:579998558
  • 上传时间:2024-08-28
  • 文档格式:PPT
  • 文档大小:2.99MB
  • / 89 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第二章 数据类型、 运算符与表达式 (9FDA.4B)16 = (_____________)8上节课问题回顾0000 ~ 00001 ~ 10010 ~ 20011 ~ 30100 ~ 40101 ~ 50110 ~ 60111 ~ 71000 ~ 81001 ~ 91010 ~ A1011 ~ B1100 ~ C1101 ~ D1110 ~ E1111 ~ F000 ~ 0001 ~ 1010 ~ 2011 ~ 3100 ~ 4101 ~ 5110 ~ 6111 ~ 7十六进制数: 9 F D A . 4 B1001二进制数:1111 1101 . 0100 10111010八进制数:117732 .226117732.226 (256)7 = (_____)6上节课问题回顾13962363603 5 1 余1余5余3351 最终目的是:用C语言编写程序来解决实际问题!数据类型、运算符与表达式理由1:因为C语言流行.理由2:因为C语言考研时必考理由3: 因为C语言在各种程序考试中首当其中。

      理由4:因为它是必修课,是老师逼的,不学不能拿学分 ……理由n:…… 为什么我们要学习C语言呢? 数据类型、运算符与表达式沃思公式程序是解决某种问题的一组指令的有序集合对数据的描述对操作的描述程序数据结构算法结论:学好C语言首先就必须十 分了解C语言的数据类型、 与运算符与表达式 ü掌握变量和常量的概念;ü理解各种类型的数据在内存中的存放形式;ü掌握各种类型数据的常量的使用方法;ü掌握各种整型、浮点型、字符型变量的定义和引用方法;ü掌握数据类型转换的规则以及强制数据类型转换的方法;ü掌握算术运算符、赋值运算符、逗号运算符的使用方法;ü理解运算符的优先级和结合性的概念,记住所学的各种运算符的优先级关系和结合性学习目的数据类型、运算符与表达式 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据简单数据类型与表示范围C语言的运算符与表达式算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 C数据类型构造类型指针类型空类型void定义类型typedef枚举类型enum数组结构体struct共用体union基本类型字符类型char浮点型单精度型float双精度型double整 型短整型short长整型long整型int数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作本章所介绍的数据类型C语言的数据类型 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 变量与常量格式:#define 符号常量 常量例:#define NUM 20 #define PI 3.1415926 常量:程序运行时其值不能改变的量(即常数)常量的分类 直接常量( 值常量)整型常量: 10、15、-10、-30实型常量: 12.5、 30.0、-1.5字符常量: ‘A’、‘b’、‘c’字符串常量: “sum”、“A”、“123”符号常量:用标识符来代表常量。

      运行结果:total = 300行尾不能有分号define前面一定要有#符号常量名最好使用大写符号常量名最好有意义 #include #define PRICE 30void main ( ){ int num, total; num = 10; total = num * PRICE; printf ("total = %d", total);}变量与常量 /* This is the second C program */#include void main ( ){ int x, y, z; scanf ("%d%d", &x, &y ); z = x + y; printf (" sum is %d\n", z);}数据类型名定义的变量名,以“,”分隔 变量与常量格式 :数据类型 变量名1[,变量名2,…,变量名n];int x, y, z;float radius, length, area; char ch;决定分配字节数和数的表示范围合法标识符变量:程序运行时其值可以被改变的量 变量的两要素 :变量名 、变量值 变量与常量如何衡量变量所占空间大小?bit,中文叫法:位Byte,中文叫法:字节Kilobyte(KB),中文叫法: KMegabyte(MB),中文叫法:兆Gigabyte(GB),中文叫法:GTerabyte(TB),中文叫法:T1 TB == 1,024 GB1 GB == 1,024 MB1 MB == 1,024 KB1 KB == 1,024 B1 B == 8 b 变量与常量ü一个位有多大?只能是“0”或者“1”,二进制ü一个字节有多大?Ø可以表示数字0~255之间的整数Ø保存一个字符(英文字母、数字、符号)ASCII(美国标准信息交换码)编码,见附录A 变量与常量变量的初始化:定义时赋初始值例: int a = 2, b, c = 4; float data = 3.67; char ch = ‘A’; int x = 1, y = 1, z = 1; int x = y = z = 1; ( (   ) )编译程序根据变量定义为其分配指定字节的内存单元地址short int a=1, b=-3, c;abc2字节2字节2字节地址地址内存…...…...1-3随机数 例1: int student; stadent = 19; //Undefined symbol ‘statent’ in function main 例2: float a,b,c; c = a % b; //Illegal use of floating point in function main 变量的使用:先定义,后赋值变量与常量 void main ( ){ int a, b = 2; a = 1; float data; data = (a + b) * 1.2; printf(“data=%f\n”,data);}void main ( ){ int a, b = 2; float data; a = 1; data = (a + b) * 1.2; printf (“data=%f\n”, data);}变量定义可执行语句变量定义位置:一般放在函数开头变量与常量 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 整型数据整型常量 十进制整数:由数字0~9和正负号表示,最高位非零 . 如:123,-456八进制整数:由数字0开头,后跟数字0~7表示.如:0123,011十六进制整数:由0x或0X开头,后跟0~9,a~f,A~F表示.如0x123,0Xff 定义整数的符号常量 #define NUM1 20 //十进制数20 #define NUM2 020 //八进制数(十进制16) #define NUM3 0x2a //十六进制数(十进制42)思考题:下列整型常量哪些是非法的? 012,oX7A,0,078,0x5Ac,-0xFFFF,0034,7B。

      首字符不能是字母o 八进制数中不能有数字8 十进制数中不能有字母B ü正数N的补码[N]补与原码[N]原和反码[N]反相同ü对于负数N,其补码[N]补的的符号为1,数值部分为 反码数值加1ü在补码表示法中,0的表示形式是唯一的,即: [+0]补 = 000…0 或 0.00…0 [-0]补 = 000…0 或 0.00…0整型数据整数在内存中的表示整数的数值在内存中用补码的形式存放将上述求得的补码的低位存放于内存单元之中,就得到了该整数在内存中的表示,内存单元的最高位是符号位(0表示正,1表示负) 整型数据整数在内存中的表示 在TC3.0下,一个整数默认情况下需要2个字节(16位)的内存单元存放;而在VC6.0下,则需要4个字节(32位) 例:十进制整数+14(对于16位的内存单元)符号位(表示正)0000111000000000低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位(+14)补 = 0000 0000 0000 1110 整型数据符号位(表示正)低字节高字节低地址高地址(+14)补 = 0000 0000 0000 0000 0000 0000 0000 1110 00001110000000000000000000000000符号位例:十进制整数+14(对于32位的内存单元) 整型数据符号位(表示负)1111001011111111低字节高字节低地址高地址符号位(+14)补 = 0000 0000 0000 1110 (-14)补 = 1111 1111 1111 0010 按位求反,末位加1 例:十进制整数-14(对于16位的内存单元) 整型数据符号位(表示负)低字节高字节低地址高地址(+14)补 = 0000 0000 0000 0000 0000 0000 0000 1110 11110010111111111111111111111111符号位(-14)补 = 1111 1111 1111 1111 1111 1111 1111 0010 按位求反,末位加1 例:十进制整数-14(对于32位的内存单元) 整型数据符号位(表示负)(+65537)补 = 01 0000 0000 0000 0001 (-65537)补 = 10 1111 1111 1111 1111 按位求反,末位加1 1111111111111111低地址高地址低字节高字节符号位取取取取低低低低16161616位位位位真值为:-1,不是-65537!例:十进制整数-65537(对于16位的内存单元) 整型数据符号位(表示负)低字节高字节低地址高地址(+65537)补 = 0000 0000 0000 0001 0000 0000 0000 0001 11111111111111111111111011111111符号位,表示负(-65537)补 = 1111 1111 1111 1110 1111 1111 1111 1111 按位求反,末位加1 真值为:-65537!例:十进制整数-65537(对于32位的内存单元) 为什么-65537这个数在16位内存单元中的表示与在32位内存单元中的表示不相同呢? 这主要是因为-65537这个数超出了16位内存单元表示数的范围,所以实际存储的值(-1)与要表示的值(-65537)不同,但-65537并没有超出了32位内存单元表示数的范围,所以实际存储的值就是其本身。

      因此,我们在C语言中对数据处理时必须要注意数据的表示范围,以免引起不必要的错误整型数据 例 补码:11111001 取反:10000110 加1:10000111=-7负数补码转换成十进制数:最高位不动,其余位取反加1整型数据考虑补码:1000000000000000、1111111111111111的十进制数负数补码转换成十进制数:最高位不动,其余位取反,得到 十进制数减1 整型数据整型变量 定义:int 变量名[, 变量名2,……,变量名n];int必须小写至少一个空格必须为合法的标识符以逗号,分隔 以分号;结尾定义时可以赋初值,方法:在变量名后面增加“= 数值” 例: int a; int x, y, z; int m = 2, y = -3; 当程序中定义了一个变量时,计算机会为这个变量分配一个相应大小的内存单元因此,这个变量是有值的,它的值就是对应内存单元的值如果定义时没有赋初值,则这个值程序员是无法预知的。

      整型数据整型变量的分类 控制变量是否有符号:signed(有符号)和unsigned(无符号)控制整型变量的值域范围 :short(短)和long(长) 在int前可以根据需要可加上修饰符6种整型变量有符号基本整型无符号基本整型有符号短整型无符号短整型有符号长整型无符号长整型[signed] intunsigned int[signed] short [int]unsigned short [int][signed] long [int]unsigned long [int] 整型数据1111111011111111低地址高地址低字节高字节符号位变量a占用的内存单元(2字节)unsigned int a = -2; //定义一个无符号整型变量a,并赋初值-2占用的内存单元字节数同int类型无符号基本型(unsigned int)数据位有符号基本型(int)int a = -2; //定义一个有符号整型变量a,并赋初值-2TC下,变量占2个字节(16位)的内存单元;VC6.0下,变量占4个字节(32位)的内存单元其值为:65534 ! 整型数据有符号短整型(short int或short)short int a = 2; //定义一个有符号短整型变量a,并赋初值2 或short a = 2;占用的内存单元为2个字节,无论是TC还是VC。

      无符号短整型(unsigned short int或unsigned short)unsigned short int a = 2; //定义一个无符号短整型变量a,并赋初值2 或unsigned short a = 2;占用的内存单元字节数同short类型 整型数据有符号长整型(long int或long)long int a = 234567; //定义一个有符号长整型变量a,并赋初值234567 或long a = 234567;占用的内存单元为4个字节,无论是TC还是VC 无符号长整型(unsigned long int或unsigned long)unsigned long int a = 2; //定义一个无符号长整型变量a,并赋初值2 或unsigned long a = 2;占用的内存单元字节数同long类型 整型数据例 各种整型变量的定义#include #define SUM 65535void main ( ){ int a, b = 20; unsigned int c = 0xff; long D; 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,并赋初值0xff //定义长整型变量D //对a赋值为SUM,这时a的值是65535 //对D赋值为301 //以有符号十进制形式("%d")显示a的值 //以有符号十进制形式(“%d”)显示b的值 //以有符号十进制形式("%d")显示c的值 //以有符号十进制形式("%d")显示D的值 变量定义部分语句执行部分在TC3.0下运行结果: a = -1 b = 20 c = 255 D = 301在VC6.0下运行结果: a = 65535 b = 20 c = 255 D = 301对于16位的有符号整型变量a来说,因65535在内存中的形式为1111111111111111,最高位为1表示负,则其所对应的十进制数就为-1。

      整型数据6种整型变量有符号基本整型无符号基本整型有符号短整型无符号短整型有符号长整型无符号长整型[signed] intunsigned int[signed] short [int]unsigned short [int][signed] long [int]unsigned long [int]问题ü整型常量是否也有这些分类?ü将整型常量赋值给各种类别的整型变量时如何 做到类型匹配?ü如果整型常量的值位于-32768~32767之间,C语言认为它是int型常 量,它可以赋值给int型和long int 型变量;ü如果整型常量的值位于-2147483648~2147483647之间,C语言认为它 是long型常量,它可以赋值给long int 型变量üshort int与int型数据在内存中占据的长度相同,因此可以相互赋值 ü整型常量后加字母l或L,认为它是long int 型常量比如123L、45l、 0XAFLü 无符号数也可用后缀表示,整型常数的无符号数的后缀为U或u例 如:358u, 0x38Au,235Lu 均为无符号数 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 浮点型数据浮点型常量其中:a为十进制数,n为十进制整数,都不可缺少。

      其可表示为a×10nü 十进制小数形式:由数字0~9和小数点组成 如:0.123, 5.6, 12.4ü指数形式:由十进制数,加阶码标志e或E以及阶码 (只能为整数,可以带符号)组成一般形式为:aen如:123.456e2, 12.3456e3, 1.23456e4规范化指数形式合法的实数表示: 2.1E5 表示2.1×105,3.7E-2 表示3.7×10-2 非法的实数表示: 345(无小数点) ,E7(阶码标志E之前无数字) , -5(无阶码标志) ,50.-E3(负号位置不对) 浮点型变量 ü单精度实型(float) float f , g; 这种定义的变量在内存中占4个字节(32位)的存储单元ü双精度实型(double) double x, y; 这种定义的变量在内存中占8个字节(64位)的存储单元 ü长双精度实型(long double) long double x, y; 这种定义的变量在内存中占16个字节(128位)的存储单元 浮点型数据 浮点型数据浮点型变量 long doubledoublefloat类型位数6432128有效数字数值范围6~715~1618~19-3.4*10-38~ 3.4*1038-1.7*10-308~ 1.7*10308-1.2*10-4932~ 1.2*104932注意:ü三种实数类型中,其精度是 float < double < long double;ülong float实际上就是double,因此,没有long float类型; 浮点型数据浮点型数据在内存中的表示方法+1. 3 1 4 1 5 9符号位小数部分指数.314159*101=3.14159浮点型数据一般在内存中占4个字节(32位),按照指数形式存储。

      在4个字节中,不少c编译系统以24位表示小数部分(包括符号),以8位表示指数部分小数部分占位越多,数的有效数字越多,指数部分占位越多,表示数值范围越大 浮点型数据#include void main ( ){ float a; //定义float型变量a double b, c; //定义double型变量b和c a = 123.45678; //对变量a赋值为123.45678 b = a; //将变量a赋给变量b c = 123.45678; //对变量c赋值为123.45678 printf("a = %f b = %lf c = %lf\n", a, b, c);}运行结果:a = 123.45676 b = 123.45676 c = 123.45678a = 123.45676 b = 123.45676 c = 123.45678 float型变量最多只能精确表示7个数字,因此显示a的值时,只能有效显示前面7个数字即123.4567,最后追加一位数字6是随机的 。

      变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 ü字符常量的值:该字符的ASCII码值ü转义字符:反斜线后面跟一个字符或一个代码值表示字符型数据字符型常量 ü定义:用单引号括起来的单个普通字符或转义字符. 如 'a' 'A' '? ' '\n' '\101'如 'A'——65, 'a'——97, '0'——48 , '\n'——10转义字符及其含义转义字符含义\n\r\'\ddd\t\b\f\\\''\xhh换行回车单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符含义转义字符如 '\101' -----------'A' '\012' -----------'\n' '\376' -----------'' '\x61' -----------'a' '\060' -----------'0' '\483' ----------() 字符型数据例: 转义字符举例 #include void main ( ){ printf ("\101 \x42 C\n"); printf ("I say:\"How are you?\"\n"); printf ("\\C Program\\\n"); printf ("Visual \'C\'"); printf ("A\Nbc\nDEF\n");}运行结果:(屏幕显示)A B CI say:”How are you?”\C Program\Visual ‘C’ANbcDEF注意:转义字符实际上作为字符来处理,但如果反斜线与 后面的字符不构成转义字符,则反斜线不起转义作 用将被忽略。

      字符型数据ü字符型数据类型符是char(字符character)ü在内存中占1个字节(8位) ü字符变量存放字符ASCII码üchar与int数据间可进行算术运算ü存在有符号和无符号之分默认情况下为有符号 例: char ch; unsigned char C = 'B';例: a = ‘D’; // a = 68; x = ‘A’ + 5; // x = 65 + 5; s = ‘!’ + ‘G’ // s = 33 + 71; 字符型变量 字符型数据字符串型常量 例: 字符串“HELLO”在内存中00x4F0x4C0x4C0x450x48低地址高地址‘ ‘HH’ ’‘ ‘E E’ ’‘ ‘L L’ ’‘ ‘L L’ ’‘ ‘OO’ ’‘ ‘\0\0’ ’字符串结束标志例: 空串 “”\0ü定义:用双引号(“”)括起来的字符序列ü存储:每个字符串尾自动加一个 ‘\0’ 作为字符 串结束标志 字符型数据字符常量与字符串常量不同0x41 0x41 \0例 ‘A’“A”char ch;ch = “A”; char ch; ch = ‘A’; ü字符常量由单引号括起来,字符串常量由双引号括起来。

      ü字符常量只能是单个字符,字符串常量可以是一个或多个字符ü可以把字符常量赋予字符变量,但不能把字符串常量赋予字符变量,c语言中没有字符串变量ü字符常量占1个字节的内存空间,字符串常量占的内存空间等于 字符串中的字节数加1 简单数据类型的表示范围 类型符号关键字占字节数数的表示范围整型有(signed)int 2-32768~32767(signed)short2-32768~32767(signed)long4-2147483648~2147483647无unsigned int20~65535unsigned short20~65535unsigned long40~4294967295浮点型有float4绝对值10-38~1038有double8绝对值10-308~10308有long double16绝对值10-4932~104932字符型有char1-128~127无unsigned char10~255 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 C语言的运算符与表达式 变量用来存放数据,运算符则用来处理数据。

      用运算符将变量和常量连接起来的符合C语法规则的式子被称为表达式 运算符的分类: 单目运算符:只带一个操作数的运算符如:++、--运算符 双目运算符:带两个操作数的运算符如:+、-运算符 三目运算符:带三个操作数的运算符如:?运算符 学习运算符时应注意: ü运算符的功能:该运算符主要用于做什么运算ü与运算量关系:要求运算量的个数及运算量的类型ü运算符的优先级:表达式中包含多个不同运算符时运算符运算的先 后次序ü运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结 合性)ü运算结果的类型:表达式运算后最终所得到的值的类型 C运算符算术运算符:(+ - * / % ++ --)关系运算符:(< <= == > >= !=)逻辑运算符:((! && ||)位运算符 :(<< >> ~ | ^ &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. ->)下标运算符:([])其它 :(( ) -)C语言的运算符与表达式 算术运算符与算术表达式基本算术运算符: + - * / %l 结合方向:从左向右l 优先级: - ---->* / % -----> + -说明:l “-”可为单目运算符时,右结合性l 两整数相除,结果为整数l %要求两侧均为整型数据例: 5 / 2 = -5 / 2.0 =例: 5 % 2 = -5 % 2 = 1 % 10 = 5 % 1 = 5.5 % 2 2-2.51-110( (   ) )算术表达式:表达式中的运算符都是算术运算符的表达式。

      算术运算符与算术表达式例: 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自增、自减运算符++ --作用:使变量值加1或减1种类:ü 前置 ++i, --i (先执行i=i+1或i=i-1,再使用i值)ü 后置 i++,i-- (先使用i值,再执行i=i+1或i=i-1) 算术运算符与算术表达式自增、自减运算符注意事项:ü++和--运算符只能用于变量,不能用于常量和表达式因为 ++和--蕴含着赋值操作 例如:5++、--(a+b)都是非法的表达式ü负号运算符、++、--和强制类型转换运算符的优先级相同, 当这些运算符连用时,按照从右向左的顺序计算,即具有右 结合性。

      ü两个+和-之间不能有空格ü在表达式中,连续使同一变量进行自增或自减运算时,很容 易出错,所以最好避免这种用法 例如:++i++是非法的ü自增、自减运算,常用于循环语句中,使循环控制变变量加 (或减)-1,以及指针变量中,使指针指向下(或上)一个 地址 算术运算符与算术表达式例:例: int p, 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-23 35 53 33 34 42 22 24 43 32 24 44 48 84 4 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 简单的赋值运算符(“=”,双目运算符,右结合) 格式:变量 = 常量或变量或表达式功能:将右边常量或变量或表达式的值赋给左边变量 例如: int x, y, z; x = 20; y = x; z = x + y;赋值运算符与赋值表达式a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3复合赋值运算符(双目运算符,右结合) 种类:+= -= *= /= %= 《= 》= &= ^= |=含义: exp1 op= exp2  exp1 = exp1 op exp2 赋值表达式: 由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。

      格式:变量 (复合)赋值运算符 表达式赋值运算符与赋值表达式例如: a = 20 a = 4*5 b+=3赋值语句: 例如: x = 8; a = b = c = 5; 赋值表达式在其后面加分号就构成了赋值语句 赋值运算符及赋值表达式的使用 ü多个变量连续赋值例如: a = b = c = 10; a = (b = (c = 10)); 结果:a、b、c 的值都为10ü赋值表达式的嵌套例如:: a=12; a+=a-=a*a a=a+(a=a-(a*a))结果:a=-264赋值运算符与赋值表达式 赋值运算符与赋值表达式ü赋值语句“=”左边必须是变量名或对应某特定内存单元 的表达式不能是常量或其它表达式 例如:30 = a; b + 2 = 5; 都是错误的ü赋值语句中的“=”表示赋值,不是代数中相等的意思 要表示相等的意思则应用关系运算符“==”表示,二者切勿混淆!注意: 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 强制类型转换运算符不同数据类型的转换自动转换强制转换------通过强制类型转换运算符转换运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换 强制类型转换运算符自动转换------运算转换: doublefloatlongunsignedintchar,short低高必定的转换运算对象类型不同时转换例: char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’ +i*f - d/m例: int i; float f; double d; long m; 强制类型转换运算符(1) 短长度的数据类型 → 长长度的数据类型方法:直接将无符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,长长度的数据类型数据的高位部分补零。

      ü无符号短长度的数据类型 → 无符号或有符号长长度的数据类型例如: unsigned char ch = 0xfc; unsigned int a = 0xff00; //假设int数据为16位 int b; unsigned long u; b = ch; //b的值将是0x00fc u = a; //u的值将是0x0000ff00自动转换------赋值转换: (1) 短长度的数据类型 → 长长度的数据类型方法:直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据的符号位)向长长度的数据类型数据的高位部分扩展 ü有符号短长度的数据类型 → 无符号或有符号长长度的数据类型强制类型转换运算符例如: char ch = 2; int a = -2; int b; unsigned long u; b = ch; //b的值将是2 u = a; //u的值将是0xfffffffe自动转换------赋值转换: (2) 长长度的数据类型 → 短长度的数据类型方法:直接截取长长度的数据类型数据的低位部分(长度为短长度的数据类型的长度)作为短长度数据类型的数据。

      例如: int a = -32768; //假设int数据为16位 unsigned long b = 0xffffaa00; char ch; int c; ch = a; //ch的值将是0 c = b; //c的值将是0xaa00强制类型转换运算符自动转换------赋值转换: (3) 长度相同的数据类型转换 方法:数据按照原样复制即可 例如: int a = 0xff00; unsigned int b = a; //b的值将是0xff00强制类型转换运算符自动转换------赋值转换: 强制转换------强制类型转换运算符: 强制类型转换运算符一般形式:(类型说明符) (表达式)功能:把表达式的运算结果强制转换成类型说明符所表示的类型其 中,(类型说明符)是强制类型转换符,它的优先级比较高。

      例: float x = 3.5, y = 2.1, z; int a; a = (int)(x+y); //结果为5 z = (int)x+y; //结果为5.100000 z = (double)(3/2); //结果为1.000000 a = (int)3.6; //结果为3精度损失问题较高类型向较低类型转换时可能发生 强制类型转换运算符在使用强制转换时应注意以下问题:ü类型说明符和表达式都必须加括号例如:把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与 y相加了ü无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型 例如:(double)a 只是将变量a的值转换成一个double型的中间 量,其数据类型并未转换成double型 变量与常量整型数据C语言的数据类型浮点型数据数据类型、运算符与表达式学习内容字符型数据算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式强制类型转换运算符 逗号运算符:,逗号表达式:用逗号连接起来的表达式。

      一般形式:表达式1,表达式2,……,表达式k优先级:优先级最低结合性:左结合性 即逗号表达式的求值顺序是从左向右依 此计算用逗号分隔的各表达式的值逗号表达式的值:最后一个表达式的值就是整个逗号表达式的值 用途:常用于循环for语句中例如:a+3, b=4, b++a+3, b=4, b++ 逗号运算符与逗号表达式 例: a = 3 * 5, a * 4 a = 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例例:#include void main ( ){ int x, y = 7; float z = 4; x = (y = y + 6, y / z); printf ("x = %d\n", x);}运行结果:x = 3逗号运算符与逗号表达式 其它运算符与表达式•关系运算符与关系表达式•逻辑运算符与逻辑表达式•位运算符与位运算表达式• 条件运算符与条件表达式 关系运算符与关系表达式关系运算符(自左向右)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例 int a=3,b=2,c=1,d,f; a>b (a>b)==c b+cb f=a>b>c//表达式值1//表达式值1//表达式值0//d=1//f=0种类:< <= == >= > != 关系运算注意:关系运算符与关系表达式例 5>2>7>8在C中是允许的, 值为 0例 ‘a’>0 结果为 ‘A’>100 结果为10例 注意区分“=”与“==” int a=0,b=1; if(a==b) printf(“a equal to b”); else printf(“a not equal to b”);例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0==1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)<1e-60 逻辑运算符与逻辑表达式逻辑运算符种类: ! && ||ab!a!ba&&ba||b真假真假假假真真真假假假假假真真假假真真真假真真逻辑运算真值表 例 a=4;b=5; !a a&&b a||b !a||b 4&&0||2 5>3&&2||8<4-!0 ‘c’&&‘d’值为1值为0值为1值为1值为1值为1//(5>3)&&2||(8<(4-(!0))) 值为1逻辑运算符与逻辑表达式 位运算符与位运算表达式种类:按位与(&)、按位或(|)、按位取反(~)、 按位异或(^)、左移(<<)、右移(>>)。

      位运算符:“与”运算:又称为逻辑乘,C语言中用“&”来表示如有A、B两个逻 辑变量,可能有的取值情况只有4种ABA&B000010100111结论:即只有A、B两个变量取值均为1,则它们“与”运算的结果才为1,其它均为0 位运算符与位运算表达式“或”运算又称为逻辑加,C语言中用“|”来表示如有A、B两个逻辑变量,可能有的取值情况只有4种ABA&B000011101111结论:即A、B变量中只要一个变量取值为1,则它们“或”运算的结果就是1 位运算符与位运算表达式“非”运算又称为逻辑反,C语言中用“~”来表示A~A0110结论:即将A的值求反 位运算符与位运算表达式“异或”运算C语言中用“^”来表示如有A、B两个逻辑变量,可能有的取值情况只有4种ABA^B000011101110结论:即当两个变量的取值相异时,则它们“异或”运算的结果就是1,相同则结果为0 位运算符与位运算表达式左移(<<):实现将某变量所对应的二进制数往左移位,溢出 的最高位被丢掉,空出的低位用零填补返回整型值的表达式 << 返回整型值的表达式例: int a = 3; a << 2:将a所对应的二进制数左移两位,该表达式的值为12。

      2 << a:将2所对应的二进制数左移三位(a的值), 该表达式的值为16 右移(>>):右移运算实现将某变量所对应的二进制数往右移位, 溢出的最低位被丢掉,如果变量是无符号数,空出的高 位用零填补,如果变量是有符号数,空出的高位用原来 的符号位填补(即负数填1,正数填0)返回整型值的表达式 >> 返回整型值的表达式 位运算符与位运算表达式例: 将short类型数据的高、低位字节互换 #include void main ( ) { short a = 0xf245 , b, c; b = a << 8 ; //将a的低8位移到高8位赋值给b,b的值为0x4500 c = a >> 8 ; //将a的高8位移到低8位赋值给c,c的值为0xfff2 c = c & 0x00ff; //将c的高8位清0后赋值给c,c的值为0x00f2 a = b + c; //将b和c的值相加赋值给a,a的值为0x45f2 printf ("a = %x", a); }a = 0x45f2 条件运算符与表达式功能:相当于条件语句,但不能取代一般if语句一般形式: expr1 ? expr2 : expr3expr1取expr2值取expr3值非0=0例 if (a>b) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,a>b?a:b);例 求 a+|b| printf(“a+|b|=%d\n”,b>0?a+b:a-b); 运算符的优先级和结合性优 先 级运 算 符需要操作数的个数结 合 性高低( )从左向右~ ++ -- -(负号运算符) sizeof (类型)1 (单目运算符)从右向左* / %2 (双目运算符)从左向右+ - (减法)2 (双目运算符)从左向右<< >>2 (双目运算符)从左向右&2 (双目运算符)从左向右^2 (双目运算符)从左向右|2 (双目运算符)从左向右= += -= *= /= %=>>= <<= &= ^= |=2 (双目运算符)从右向左,从左向右 判断表达式0XF0F0 & 0X1010 + 0X0A0A << 5/2的值 ? 0XF0F0 & 0X1010 + 0X0A0A << 5/22①①①①②②②②0X1A1A0XF0F0 &<<③③③③0X68680XF0F0 &④④④④0X6060/的优先级最高 +的优先级比&、<<高 <<的优先级比&高 本章小结 本章所介绍的主要内容是整型数据、实型数据和字符型数据的常量表示法和变量定义格式,以及可以作用于这些数据类型的运算符。

      虽然本章的内容比较烦杂,学起来也许比较枯燥,但本章的内容是学好C语言的基础,是每个C语言程序员必须熟练掌握的现在我们一起来回忆一下本章有哪些内容值得我们特别留意和必须深刻领会的呢?ü 变量的含义ü 数据在内存中的表示形式ü 不同类型的数据在内存中的表示范围ü 转义字符ü 有符号数与无符号数的区别ü 数据类型的自动转换与强制类型转换ü 各种运算符、运算符的优先级和结合性 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.