C语言程序设计基础 刘新国.

Slides:



Advertisements
Similar presentations
第6章 基本的程序语句 6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级
Advertisements

第三章 数据的使用.
课前回顾 数据类型 基本类型 构造类型 指针类型 空类型 常量与变量 常量及常量的类型 变量 标识符及有关规定 变量声明格式 赋值运算符.
C/C++语言程序设计 第二章 数据类型和表达式 龚尚福,贾澎涛主编 《C/C++语言程序设计》 西安电子科技大学出版社.
没有规矩,不成方圆。.
第二章 基本数据类型及运算 数据类型 常量与变量 不同类型数据间的转换 运算符和表达式.
C++程序设计 第二章 数据类型与表达式.
Chapter2 Constants, Variables, and Data Types
第三章 C语言基础 学习目标: 熟练掌握:C语言的基本数据类型、运算符及表达式 掌握:常见的输入、输出函数使用方法;
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
基础篇 基础知识 —C语言程序设计 学习目标 掌握C语言中三种常见的基本类型及其使用方法 掌握常见的算术运算符和表达式的使用
C语言程序设计 第三章 数据类型、运算符与表达式
第2章 数据类型与数据运算.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
第二章 基本元素、类型和概念 七、输出函数printf 八、输入格式转换函数scanf.
Chap 3 分支结构 3.1 简单的猜数游戏 3.2 四则运算 3.3 查询自动售货机中商品的价格.
C语言 程序设计基础与试验 刘新国、2012年秋.
Chap 3 分支结构 3.1 统计输入的一批字符中各类字符的数量 3.2 查询自动售货机中商品的价格 3.3 分支结构程序设计.
程序设计基础 第 二 章 谌 卫 军 清华大学软件学院 2008年秋季.
第三单元 数据的输入、赋值处理与输出 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
第二章 Java语言基础.
第2章 数据类型、运算符和表达式.
C语言大学实用教程 第三章 简单的C程序设计 西南财经大学经济信息工程学院 刘家芬
3 数据类型、运算符 和表达式.
课程网站 /2/23 《程序设计》-2018秋.
第二章 数据类型、运算符与表达式.
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第三章 数据类型、运算符与表达式.
第2章 数据的存储与运算 2.1 数据在计算机中是怎样存储的 2.2 整型数据的运算与分析 2.3 实型数据的运算与分析
第4章 顺序程序设计.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
目录 2.1数据类型 2.2常量 2.3变量 2.4库函数 2.5运算符及表达式 1.
程序设计基础A(C语言) 主讲教师: 许 康 教师主页:
C程序设计.
第9章 位 运 算.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
数据类型与运算规则.
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
第3章 数据类型、运算符与表达式.
第九节 赋值运算符和赋值表达式.
第2章 基本数据及其运算 本章学习的目标: 1、掌握基本数据的各种表示,基本数据常数的书写方法;
第二章 类型、对象、运算符和表达式.
C语言程序设计 李祥 QQ:
第2章 数据类型、运算符与表达式 2.1 程序设计概述
第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
C程序设计 实验二 数据类型、运算符和表达式 第6讲
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
本节内容 指针类型.
第二章 Java基本语法 讲师:复凡.
Introduction to the C Programming Language
程序设计基础A(C语言) 第一章 C语言概述 主讲教师: 许 康
Chap 6 数据类型和表达式 6.1 数据的存储和基本数据类型 6.2 常量和变量 6.3 数据的输入和输出 6.4 类型转换
第3章 数据类型、运算符与表达式 3.1 程序设计概述
基本知识 数据类型、变量、常量、运算符.
数据表示 第 2 讲.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
第二章 数据类型与表达式 丘志杰 电子科技大学 计算机学院 软件学院.
第9章 位 运 算.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
学习目标 1、什么是列类型 2、列类型之数值类型.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C语言程序设计基础 刘新国

第六章数据类型和表达式 6.1 数据的存储和基本数据类型 6.2 常量和变量 6.3 数据的输入和输出 6.4 类型转换 6.5 表达式

C语言的数据类型 基本数据类型 整型 实型(浮点型) 字符型 构造数据类型 数组、结构、联合、枚举 指针类型 空类型(void) 后续学习

一、基本数据类型的存储 整型 实型 字符型

整型数据存储 整数的第一位bit用于表示整数的符号 1 - 负数 0 - 正数 1 000 0001 1000 0001 0 000 0001 1000 0001

原码、反码、补码 正数的原码、反码和补码相同 负数的原码、反码和补码不同 1 的补码 0 000 0000 0000 0001 …… 1 的补码 0 000 0000 0000 0001 …… 32767 的补码 0 111 1111 1111 1111 (215-1,2个字节的存储单元能表示的最大正数) 负数的原码、反码和补码不同 -1 原码 1 000 0000 0000 0001 反码 1 111 1111 1111 1110 原码取反 补码 1 111 1111 1111 1111 反码+1

原码 反码 补码 32767 补码 0 111 1111 1111 1111 -32767 原码 1 111 1111 1111 1111 反码 1 000 0000 0000 0000 原码取反 补码 1 000 0000 0000 0001 反码+1 -32768 = -32767-1 补码 1 000 0000 0000 0000 = -215,2个字节的存储单元能表示的最小负数

-32768 -1 0 1 32767 32767 0111 1111 1111 1111 32766 0111 1111 1111 1110 32765 0111 1111 1111 1101 …… 1 0000 0000 0000 0001 0 0000 0000 0000 0000 -1 1111 1111 1111 1111 -2 1111 1111 1111 1110 -32767 1000 0000 0000 0001 -32768 1000 0000 0000 0000 32767 + 1 = ? 0111 1111 1111 1111 +1 = 1000 0000 0000 000 (-32768) -32768 - 1 = ??? 1000 0000 0000 0000 -1 = 0111 1111 1111 1111 (32767)

浮点型数据存储 x = ±m * re m – 尾数 r – 基数 e – 阶码 实型数据的存储 IEEE标准规定,常用的浮点数的格式为: 符号位  阶码 尾数  总位数  短浮点数   1    8   23   32    浮点数   1    11   52   64   临时浮点数  1    15   64   80 ± m e 符 阶码 尾数 号 位

字符型数据存储 占据一个字节 存储ASCII码

二、基本数据类型 整型 字符型 实型(浮点型) 有符号整型 无符号整型 数据长度 int unsigned [int] 16或32位 有符号整型 无符号整型 数据长度 int unsigned [int] 16或32位 short [int] unsigned short [int] 16位 long [int] unsigned long [int] 32位 字符型 char 8位 实型(浮点型) 单精度浮点型 float 32位 双精度浮点型 double 64位

基本数据类型-整型 扩展的整数类型:short, long, unsigned [int] 有符号整型 无符号整型 数据长度 有符号整型 无符号整型 数据长度 int unsigned [int] 16或32位 short [int] unsigned short [int] 16位 long [int] unsigned long [int] 32位 short (有符号) 1 000 0000 0000 0000 -32768(-215) 0 111 1111 1111 1111 32767(215-1) unsigned short(无符号 ) 0000 0000 0000 0000 0 1111 1111 1111 1111 65535(216-1)

整数类型的取值范围 int 32位 [-231, 231-1] short [int] 16位 [-215, 215-1] long [int] 32位 [-231, 231-1] unsigned [int] 32位 [0, 232-1] unsigned short [int] 16位 [0, 216-1] unsigned long [int] 32位 [0, 232-1]

基本数据类型-字符型 小写字母:'a' 'b' 'c' … 'z' 大写字母:'A' 'B' 'C' … 'Z' 数字:'0' '1' '2' … '9' 括号、标点符号、运算符 ( ) { } , . ' " ! # @ + - * / % > < = 等等

基本数据类型-字符型 转义字符 附录B(ASCII码表,P334) %就是%,不是\%。但是 换行符 \n 制表符 \t 反斜杠 \\ 双引号 \" 单引号 \' \ddd 1-3位八进制码代表的字符 \xhh 1-2位十六进制码代表的字符 附录B(ASCII码表,P334) %就是%,不是\%。但是 在scanf和printf函数的控制字符串中, %具有特殊作用 (将其后的字符解释为格式字符), 所以用%%表示字符%本身

基本数据类型-字符型 字符具有数值特征(值为ASCII码的整数) 适用算术运算、关系运算 char c; c = 'A'; 或 c = 65; c+1 就是字符'B'

基本数据类型-实型 实型(浮点型)数据 单精度浮点型 float 双精度浮点型 double 存储 数据精度 取值范围 (有效数字) 存储 数据精度 取值范围 (有效数字) float 4字节 7/8位 ±(10-38 - 1038) double 8字节 16位 ±(10-308 - 10-308 )

数据精度和取值范围 数据精度 与 取值范围是两个不同的概念: 并非所有实数都能在计算机中精确表示 float x = 1234567.89; 虽在取值范围内,但无法精确表达。 float y = 1.2e55; y 的精度要求不高,但超出取值范围。 并非所有实数都能在计算机中精确表示

实数的常量表示 普通表示 -12345.678 科学计数法表示 -1.2345678E5 实型常量的类型都是double 符号+整数部分+小数点+小数部分 科学计数法表示 -1.2345678E5 实型常量的类型都是double 用f作为后缀,表示浮点数常量 3.14f

三、数据的输入输出 printf (格式控制字符串, 输出参数1, ... , 输出参数n); scanf (格式控制字符串, 输入参数1, ... , 输入参数n); 格式控制字符串 "%d%f%c" "k = %d, x = %f, h = %c" 格式控制说明符 % 字符char:%c 实数float:%f 实数doulbe:%lf 整数int: %d

整型数据的输入输出 扩展整数的格式控制符 十进制 八进制 十六进制 int %d %o %x long %ld %lo %lx 十进制 八进制 十六进制 int %d %o %x long %ld %lo %lx unsigned %u %o %x unsigned long %lu %lo %lx

【示例】整型数据输出格式 # include <stdio.h> void main(void) { printf("%d, %o, %x\n", 10, 10, 10); printf("%d, %d, %d\n", 10, 010, 0x10); printf("%d, %x\n", 012, 012); } 运行结果是什么? 10, 12, a 10, 8, 16 10, a

输出格式的宽度控制 int a, b; scanf("%o%d\n", &a, &b); printf("%d %5d\n", a, b); 如果输入17 17 那么运行结果是什么? 15 17 宽度控制 %md 表示:数据输出的宽度为m(包括符号位)。 若实际宽度不足m个,左边补充空格。 若大于m,则按照实际宽度输出。

实型数据的输入和输出 float:%f 或 %e double: %lf或%le 输出 printf() 以小数或指数形式输入一个单精度浮点数 double: %lf或%le 以小数或指数形式输入一个双精度浮点数 输出 printf() float 和double使用相同的格式控制说明 %f:以小数形式输出浮点数,保留6位小数 %e:以指数形式输出

实型数据输出示例 一共5位 小数3位 小数点1位 double d = 3.1415926; printf("%f,%e\n", d, d); printf("%5.3f,%5.2f,%.2f\n", d, d, d); 一共5位 小数3位 小数点1位 3.141593,3.14159e+00 3.142, 3.14,3.14

实型数据输入输出示例 /*假定float的精度为7位,double的精度为16位*/ # include <stdio.h> int main(void) { float f; double d; printf("input f, d:"); scanf("%f%lf", &f, &d); printf("f = %f\n d = %f \n", f, d); d = 1234567890123.12; printf("d = %f \n", d); return 0; } input f, d: 1234567890123.123456 1234567890123.123456 f = 1234567954432.000000 d = 1234567890123.123540 d = 1234567890123.120120

字符型数据输入输出 scanf() 和 printf() getchar() 和 putchar() %c char ch; scanf("%c", &ch); printf("%c", ch); getchar() 和 putchar() ch = getchar( ); putchar(ch); 输入输出一个字符

输入输出字符示例 # include <stdio.h> int main(void) { char ch1, ch2, ch3; scanf("%c%c%c", &ch1, &ch2, &ch3); printf("%c%c%c%c%c", ch1, '#', ch2, '#', ch3); return 0; } AbC A#b#C A bC A# #b

输出字符型数据 b, 98 a, 97 B, 66 /* 字符b的ASCII码98 */ # include <stdio.h> int main(void) { char ch = 'b'; printf("%c, %d\n", 'b', 'b'); printf("%c, %d\n", 98, 98); printf("%c, %d\n", 97, 'b'-1); printf("%c, %d\n", ch - 'a' + 'A', ch - 'a' + 'A'); return 0; } b, 98 a, 97 B, 66

字符运算 大小写英文字母转换 数字字符和数字转换 9 - 0 = '9' - '0' 8 - 0 = '8' - '0 ' …… 'B' - 'b' = 'A' - 'a' …… 'Z' - 'z' = 'A' - 'a' 大写字母 = 小写字母+ 'A' - 'a' 小写字母 = 大写字母+ 'a' - 'A' 数字字符和数字转换 9 - 0 = '9' - '0' 8 - 0 = '8' - '0 ' …… 1 - 0 = '1' - '0' 数字字符 = 数字 + '0' 数字 = 数字字符 - '0'

三 类型转换 不同类型数据的混合运算,先转换为同一类型,再运算。 自动类型转换 非赋值运算的类型转换 赋值运算的类型转换 强制类型转换

自动类型转换(非赋值运算) 水平方向:自动 垂直方向:低  高 短->长 带符号->无符号 高 double  float unsigned long  long unsigned  unsigned short 低 int  char, short 水平方向:自动 垂直方向:低  高 短->长 带符号->无符号

自动类型转换(非赋值运算) 'A' + 12 – 10.05 65 77 66.95

自动类型转换(赋值运算) 变量 = 表达式 计算赋值运算符右侧表达式的值 将赋值运算符右侧表达式的值赋给左侧的变量 将赋值运算符右侧表达式的类型 自动转换成 赋值号左侧变量的类型

【例子】自动转换 long a = -1; unsigned long b, c; b = a; 问 b = ? c = a+1; 问 c = ? c = c + a; 问 c = ?

自动类型转换(赋值运算) double x; short a = 1000; x = 1; char b = 'A'; long c; c = a + b; x = 1.0 c = 1065 int ai; ai = 2.56; short bi; bi = 0x12345678L ai = 2 bi = 0x5678

强制类型转换 强制类型转换运算符 (类型名) 表达式 (double)3 (int)3.8 (double)(5/2) (类型名) 表达式 (double)3 (int)3.8 (double)(5/2) (double)5/2

五 表达式 表达式:由运算符和运算对象(操作数)组成的有意义的运算式子,它的值和类型由参加运算的运算符和运算对象决定。 运算符:具有运算功能的符号 运算对象:常量、变量和函数等表达式 算术表达式、赋值表达式、关系表达式、逻辑表达式、条件表达式和逗号表达式等 表达式可以嵌套 A A + B A + 5*x

算术表达式-算术运算符 单目 + - ++ -- 双目 + - * / % 注意 / 整数除整数,得整数 1/4 = 0,10/3 = 3 单目 + - ++ -- 双目 + - * / % 注意 / 整数除整数,得整数 1/4 = 0,10/3 = 3 % 模(求余): 针对整型数据 5%6 = 5,9%4 = 1,100%4 = 0 + 和 – 单目运算符, +10 和 –10 双目运算符, x+10 和 y –10 双目运算符两侧操作数的类型要相同,否则,自动类型转换后,再运算。

自增运算符++和自减运算符-- n++ ++n n-- --n (只适合变量运算) 使变量的值增1或减1 ++n n++ n = n + 1 int n; n++ ++n n-- --n (只适合变量运算) 使变量的值增1或减1 ++n n++ n = n + 1 --n n-- n = n - 1 取变量的值作为表达式的值 ++n:n = n + 1;取n值作为表达式 ++n 的值 n++:取n值作为表达式 n++ 的值;n = n + 1

自增运算和自减运算 等价于n=n+1 m=n 结果:n为3,m 为3 等价于m=n m=n+1 结果:n为3,m 为3 int n, m;

算术运算符的优先级和结合性 单目 + - ++ -- 从右向左 高 双目 * / % 双目 + - 低 单目 + - ++ -- 双目 * / % 双目 + - 从右向左 高 低 -5 + 3%2 = (-5) + (3%2) = -4 3 * 5 % 3 = (3*5) % 3 = 0 -i++ -(i++)

写出C表达式 s*(s-a)*(s-b)*(s-c) (x+2)*exp(2*x) (-b+sqrt(b*b-4*a*c))/(2*a)

赋值表达式 赋值运算符 = x = 3*4 优先级较低,结合性从右向左 x = y = 3 x = (y = 3)

赋值表达式 变量 = 表达式 计算赋值运算符右侧表达式的值 将赋值运算符右侧表达式的值赋给左侧的变量 右侧表达式的类型自动转换成左侧变量的类型 将赋值运算符左侧的变量的值作为表达式的值 int n; double x, y; n = 3.14 * 2; x = 10 / 4; x = (y = 3);

复合赋值运算符 赋值运算符 赋值表达式 从右到左结合 简单赋值运算符 = 复合赋值运算符 变量 赋值运算符 表达式 复合算术赋值运算符 += -= *= /= %= 复合位赋值运算符 赋值表达式 变量 赋值运算符 表达式 x += exp  x = x + exp x *= y – 3  x = x * (y – 3) 从右到左结合 y = 3; x = y += 5;

关系表达式-关系运算符 比较两个操作数,比较的结果:真 假 优先级 左结合 x < y x <= y x == y 比较两个操作数,比较的结果:真 假 x < y x <= y x == y x > y x >= y x != y 优先级 算术运算符 < <= > >= == != 赋值运算符 左结合 a > b == c d = a > b ch > 'a' + 1 d = a + b > c 3 <= x <= 5 b - 1 == a != c (a > b)== c d = (a > b) ch > ('a' + 1) d = ((a + b) > c) (3 <= x) <= 5 ((b - 1) == a) != c

关系表达式 用关系运算符将2个表达式连接起来的式子 char ch = 'w'; int a = 2, b = 3, a > b == c d = a > b ch > 'a' + 1 d = a + b > c b - 1 == a != c 3 <= x <= 5 关系运算的结果 真 1 假 0 1 char ch = 'w'; int a = 2, b = 3, int c = 1, d, x=10;

逻辑运算 运算对象为逻辑值 逻辑运算结果:1(真) 0 (假) && 逻辑与: a && b 为真 <=> a和b都为真 逻辑运算结果:1(真) 0 (假) && 逻辑与: a && b 为真 <=> a和b都为真 a && b 为假 <=> a和b不全为真 (至少一个为假) || 逻辑或: a || b 为真 <=> a和b不全为假 (至少一个为真) ! 逻辑非: ! a 为真 <=> a为假 ! A 为假 <=> a为真

a与b的逻辑运算 a b a&&b a||b !a 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0

逻辑运算运用 判断字符 ch 是否为数字字符 ch>='0' && ch<='9' if( ch>='0' && ch <='9' ) printf("It is a digital\n"); else printf("It is NOT a digital\n");

逻辑运算运用(续) 判断字符 ch 是否为小写字母 判断字符 ch 是否为大写字母 判断字符 ch 是否为字母 ch>='a' && ch<='z' 判断字符 ch 是否为大写字母 ch>='A' && ch<='Z' 判断字符 ch 是否为字母 (ch>='a' && ch<='z') || (ch>='A' && ch<='Z')

逻辑运算符的优先级和结合性 优先级 左结合 ! 算术运算符 关系运算符 && || 赋值运算符 a || b && c !a && b x >= 3 && x <= 5 !x == 2 a || 3 + 10 && 2 a || (b && c) (!a) && b (x >= 3) && (x <= 5) (!x) == 2 a || ((3 + 10) && 2)

逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来的式子 哪些是逻辑表达式? a && b a || b && c !(x == 2) !x == 2 ch || b char ch = 'w'; int a = 2, b = 0, c = 0; float x = 3.0; 1 exp1 && exp2 先算exp1,若其值为0, 则 STOP exp1 || exp2 先算exp1,若其值为1, 则STOP

例6-3写出满足要求的逻辑表达式 x 为零 x 不为零 x 和 y 不同时为零 x取0 x==0 真 x取非0 x==0 假 等价 x取0 !x 真 x取非0 !x 假

条件表达式 exp1 ? exp2 : exp3 if ( exp1 ) 值为exp2 else x+2 x>0 y = if ( a>b ) z = a; else z = b; exp1 ? exp2 : exp3 if ( exp1 ) 值为exp2 else z = (a>b) ? a : b; x+2 x>0 y = x2 x<=0 if ( x>0 ) y=x+2; else y=x*x; y = (x>0) ? x+2 : x*x;

逗号表达式 表达式1, 表达式2, ……, 表达式n 依次计算表达式1,表达式2,……,表达式n,并将最后一个表达式的值作为逗号表达式的值. int a, b, c; (a=2), (b=3), (c=a+b); 逗号运算符的优先级最低,左结合 可以不用括号:a=2, b=3, c=a+b

逗号表达式的用途 sum = 0; for(i = 0; i <= 100; i++) sum = sum + i; for(i = 0, sum = 0; i <= 100; i++) sum = sum + i;

6.5.7 位运算 位逻辑运算 移位运算 复合位赋值运算 ~ 按位取反 单目 右结合 & 按位与 ^ 按位异或:相同取0,不同取1 6.5.7 位运算 位逻辑运算 ~ 按位取反 单目 右结合 & 按位与 ^ 按位异或:相同取0,不同取1 | 按位或 移位运算 << 对操作数左移给出的位数 >> 对操作数右移给出的位数 复合位赋值运算

位逻辑运算 注意区分: & 和 && | 和 || x=0 00000000 y=3 00000011 x & y 00000000 | 和 || ~ 按位取反 & 按位与 ^ 按位异或:相同取0,不同取1 | 按位或 x=0 00000000 y=3 00000011 x & y 00000000 x | y 00000011 x ^ y 00000011 1010 ^ 0101 =1111

位移位运算 << 对操作数左移给出的位数 >> 对操作数右移给出的位数 << 对操作数左移给出的位数 >> 对操作数右移给出的位数 x<<3 将x向左移3位,空出的位用零填补 00111010 << 3 11010000 x>>3 将x向右移3位 00111010 >> 3 00000111

复合位赋值运算符 &= |= ^= >>= <<= a &= b 相当于 a = a & b a <<= 2 相当于 a = a << 2

6.5.8 其他运算 长度运算符 sizeof 单目运算符,计算变量或数据类型的字节长度 int a; sizeof(a) 6.5.8 其他运算 长度运算符 sizeof 单目运算符,计算变量或数据类型的字节长度 int a; sizeof(a) 求整型变量 a 的长度,值为4 sizeof(int) 求整型的长度,值为4 sizeof(double) 求双精度浮点型的长度,值为

运算符的优先级和结合性 ( ) ! - + ++ -- (类型名)sizeof * / % + - * / % + - < <= > >= == != && || ? : = += -= *= /= %= ,

[例6-5] 大小写字母转换 ch = getchar(); while(ch != '\n') { if(ch >= 'A' && ch <= 'Z') ch = ch - 'A' + 'a'; else if((ch >= 'a' && ch <= 'z' ) ch = ch - 'a' + 'A'; putchar(ch); }

6.5.9 程序解析-大小写字母转换 可以把 (ch = getchar()) != '\n' 改为 6.5.9 程序解析-大小写字母转换 while( (ch = getchar()) != '\n' ) { if(ch >= 'A' && ch <= 'Z') ch = ch - 'A' + 'a'; else if((ch >= 'a' && ch <= 'z' ) ch = ch - 'a' + 'A'; putchar(ch); ch = getchar(); } 可以把 (ch = getchar()) != '\n' 改为 ch = getchar() != '\n' 吗?

本章内容总结 6.1 数据的存储和基本数据类型 6.2 常量和变量 6.3 数据的输入和输出 6.4 类型转换 6.5 表达式