二级C语言PPT教学课件,14_位运算与文件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
28
文件16-3
[2007.4.49]以下程序的运行结果是 123,456 FILE *fp; int k, n, a[6] = {1,2,3,4,5,6}; fp = fopen("d2.dat", "w"); fprintf(fp, "%d%d%d\n", a[0],a[1],a[2]); fprintf(fp, "%d%d%d\n", a[3],a[4],a[5]); fclose(fp); fp = fopen("d2.dat", "r"); fscanf(fp, "%d%d", &k, &n); printf("%d,%d\n", k, n); fclose(fp);
25
用户与磁盘文件
磁盘
缓冲区
用户
26
文件16-1
[2004.9.47][2009.3.40]文件f1.txt中原内容为: good,运行下面程序后,文件f1.txt内容为 FILE *fp = fopen("f1.txt", "w"); abc fprintf(fp, "abc"); fclose(fp); [2011.3.40]执行FILE *fp=fopen("file","w"); 后,以下针对文本文件file操作叙述正确的是 A)写操作结束后可以从头开始读 B)只能写不能读 C)可以在原有内容后追加写 D)可以随意读和写
5
十进制转换为其它进制
口诀: 除基取余倒排序
(11)10 = (1011)2
除基2 2 2 11 5 2 2 1 0
6
(2620)10 = (A3C)16
余数1 余数1 余数0 余数1
16
16 16
2620
163 10 0
余数12(C)
余数3 (3) 余数10(A)
"8421"口诀
从小数点向左,每3位(或4位)二进制数转换 成1位八进制(或十六进制)数,不足补0。
和 1 异或取反,和 0 异或不变
17
位运算符
a 0
0 1 1
b 0
1 0 1
a&b 0
0 0 1
a|b 0
1 1 1
a^b 0
1 1 0
~a
1
1 0 0
18
C语言运算符优先级完整口诀
19
成单算移关与,异或逻条赋逗
□ 成员运算:("()",[ ],->,结构体成员.) □ 单目运算:(!,-,++,--,取值*,取址&,位取反~) □ 算术运算:(*,/,%)级别高于(+,-) □ 位移运算:(<<,>>) □ 关系运算:(>,>=,<,<=)级别高于(==,!=) □ 位与运算:(&) □ 位异或运算:(^) □ 位或运算:(|) □ 逻辑运算:(&&)级别高于(||) □ 条件运算:(? :) □ 赋值运算:(=,+=, ... ,<<=,>>=,&=,|=,^=) □ 逗号运算:(,)
4
其它进制转换为十进制
口诀:乘幂展开
(1011)2 = (1×23 + 0×22 + 1×21 + 1×20)10 = (11)10 (345)8 = (3×82 + 4×81 + 5×80)10 = (229)10 (A3C)16 = (10×162 + 3×161 + 12×160)10 = (2620)10
[2009.9.39]以下程序的运行结果是 int r = 8; printf("%d", r >> 1);
4
0 [2010.3.39]以下程序的运行结果是 int a = 2; printf("%d", a / a & a);
23
位运算4-4
[2010.9.40]填空,使程序运行结果为248 short c = 124; printf("%d", c ); A)>> 2 B)| 248 C)& 0248 D)<< 1 [2011.3.39]以下程序的运行结果是 unsigned char a = 8, c; c = a >> 3; printf("%d", c); [2011.9.38]以下程序的运行结果是 int a = 2, b; b = a << 2; printf("%d", b);
0101 1101 1001 1110 1100 1010 . 8421 十进制 16进制 5 D 9 E 1111 C15 A F . 010 111 011 001 111 011 001 010A . 1010 10 2 7 3 1 7 0110 1 3 6 2 6.
同理,八进制(或十六进制)数转换成二进制 1101 13 D 数,每1位展开成3位(或4位)二进制数。
7
详说整数
数据在计算机中以二进制存储,在VC++ 6.0 中,整数(int)占4个字节。 [2010.9.13]以下叙述中错误的是 1字节 = 8位2进制数 A)C程序在运行过程中所有计算都以二进制方 1Byte = 8Bits 式进行 1K = 1024Bytes B)C程序在运行过程中所有计算都以十进制方 1M = 1024K 式进行 1G = 1024M C)所有C程序都需要编译链接无误后才能运行 1T = 1024G D)C程序中整型变量只能存放整数,实型变量 只能存放浮点数
0 [2006.9.48]以下程序的运行结果是 int s = 32; s ^= 32; printf("%d", s);
21
位运算4-2
4 [2007.4.48]以下程序运行后,d的值是 unsigned char a = 2, b = 4, c = 5, d; d = a | b; d &= c; [2007.9.48]以下程序运行后,x的值是 int x = (1 ^ 2) & 3;
25,21,37 [2004.9.7]以下程序的运行结果是 int a = 25, b = 025, c = 0x25; printf("%d,%d,%d", a, b, c);
9
整型常量2-2
[2010.3.22]以下程序的运行结果是 int k = 011; printf("%d", k++); 9
8
整型常量2-1
a = 13,15,d,D [例]以下程序的运行结果是 int a = 13; printf("a = %d,%o,%x,%X", a, a, a, a); [2004.4.18]以下程序的运行结果是 int x = 102,y = 012; printf("%2d,%2d", x, y); 102,10
main() { int a, b; a = b = 4; a = a << 1; b = b >> 1; printf("%d, %d", } 32位 0000 ... 0100 0000 ... 1000 0000 ... 0010 a, b); 4 8 2
13
按位取反~
main() { 32位 int a, b; 0000 ... 0001 a = 1; 1111 ... 1111 b = ~a + 1; printf("%d, %d", a, b); }
24
1
8
打开、关闭文件
#include <stdio.h> a-append +-r&w main() r-read b-binary { w-write t-text FILE *fp; fp = fopen("a.txt", "wt"); fputs("Hello", fp); fclose(fp); a.txt }
27
文件16-2
[2005.4.50]运行后,t1.dat的内容是 end void WriteStr(char *fn, char *str) { FILE *fp; fp = fopen(fn, "w"); fputs(str, fp); fclose(fp); } main() { WriteStr("t1.dat", "start"); WriteStr("t1.dat", "end"); }
29
文件16-4
[2004.4.49]以下程序的运行结果是 FILE *fp; int i, k = 0, n = 0; fp = fopen("d1.dat", "w"); for (i = 1; i < 4; i++) fprintf(fp, "%d ", i); fclose(fp); fp = fopen("d1.dat", "r"); fscanf(fp, "%d%d", &k, &n); printf("%d,%d\n", k, n); fclose(fp);
二进制 十进制
备注 231-1 -231
0000 0111 1000 1111
11
.... .... .... ....
0000 1111 0000 1111
0 2147483647 -2147483648 -1
位运算符
位左移
<<
&
位与
位右移
>>
位运算
|
位或
位取反
~
^
位异或
12
位左移<<、位右移>>
30
1,2
文件16-5
[2005.9.50]以下程序的运行结果是 1,2 FILE *fp; int i, k, n; fp = fopen("data.dat", "w+"); for (i = 1; i < 6; i++) { fprintf(fp, "%d ", i); if (i % 3 == 0) fprintf(fp, "\n"); } rewind(fp); fscanf(fp, "%d%d", &k, &n); printf("%d,%d", k, n); fclose(fp);
和 0 与置 0,和 1 与不变
15
位或 |
全0才0 main() { 32位 int a, b, c; a = 0xf0; 0000 ... 1111 0000 b = 0x55; 0000 ... 0101 0101 c = a | b; 0000 ... 1111 0101 printf("%x", c); }
和 1 或置 1,和 0 或不变
16
位异或 ^
不同为 1,相同为 0 main() { 32位 int a, b, c; a = 0xf0; 0000 ... 1111 0000 b = 0x55; 0000 ... 0101 0101 c = a ^ b; 0000 ... 1010 0101 printf("%x", c); }
负数 = 正数取反 + 1
1 -1
14
位与&
全1才1 main() { 32位 int a, b, c; a = 0xf0; 0000 ... 1111 0000 b = 0x55; 0000 ... 0101 0101 c = a & b; 0000 ... 0101 0000 printf("%x", c); }
3
[2008.4.38]a中的数据用二进制表示的形式是 01011101,b的数据二进制形式是11110000, 要将a的高4位取反,低4位不变,需执行 A)a ^ b B)a | b C)a 百度文库 b D)a << 4
22
位运算4-3
[2008.9.39]以下程序的运行结果是 8 char a = 4; printf("%d", a = a << 1); 21 [2009.3.39]以下程序运行后,t的值是 int a = 5, b = 1, t = (a << 2) | b;
Lesson 14
位运算与文件
mtysoft@163.com
本课内容
整型常量与数制转换 6 个位运算符 C 运算符完整口诀 FILE 与文件操作权限
13 个文件操作函数
2
3
常用数制
常用数制、整型常量 及格式符
十进制 十六进制
八进制
二进制
没有二进制 常量
格式符%o, 常量以0开 头,如023
格式符%x或 格式符%d, %X,常量都 常量无前缀, 以0x或0X开 如234 头,如0x3A
[2010.9.6]以下程序的运行结果是 int a = 200, b = 010; printf("%d%d", a, b); [2011.3.18]以下程序的运行结果是 int x = 011; printf("%d", ++x);
10
2008
10
整数有范围
黄氏定理二:整数有范围,最大的正 整数加一,等于最小的负整数。 ★公式表示:2147483647 + 1 = -2147483648
20
位运算4-1
[2005.4.36]以下程序的运行结果是 int c = 35; printf("%d", c & c); 35
4,3 [2005.9.49]以下程序的运行结果是 unsigned char a = 7 ^ 3, b = ~4 & 3; printf("%d,%d", a, b); 9 [2006.4.28]以下程序运行后,c的值是 int a = 1, b = 2, c = a ^ (b << 2);
文件16-3
[2007.4.49]以下程序的运行结果是 123,456 FILE *fp; int k, n, a[6] = {1,2,3,4,5,6}; fp = fopen("d2.dat", "w"); fprintf(fp, "%d%d%d\n", a[0],a[1],a[2]); fprintf(fp, "%d%d%d\n", a[3],a[4],a[5]); fclose(fp); fp = fopen("d2.dat", "r"); fscanf(fp, "%d%d", &k, &n); printf("%d,%d\n", k, n); fclose(fp);
25
用户与磁盘文件
磁盘
缓冲区
用户
26
文件16-1
[2004.9.47][2009.3.40]文件f1.txt中原内容为: good,运行下面程序后,文件f1.txt内容为 FILE *fp = fopen("f1.txt", "w"); abc fprintf(fp, "abc"); fclose(fp); [2011.3.40]执行FILE *fp=fopen("file","w"); 后,以下针对文本文件file操作叙述正确的是 A)写操作结束后可以从头开始读 B)只能写不能读 C)可以在原有内容后追加写 D)可以随意读和写
5
十进制转换为其它进制
口诀: 除基取余倒排序
(11)10 = (1011)2
除基2 2 2 11 5 2 2 1 0
6
(2620)10 = (A3C)16
余数1 余数1 余数0 余数1
16
16 16
2620
163 10 0
余数12(C)
余数3 (3) 余数10(A)
"8421"口诀
从小数点向左,每3位(或4位)二进制数转换 成1位八进制(或十六进制)数,不足补0。
和 1 异或取反,和 0 异或不变
17
位运算符
a 0
0 1 1
b 0
1 0 1
a&b 0
0 0 1
a|b 0
1 1 1
a^b 0
1 1 0
~a
1
1 0 0
18
C语言运算符优先级完整口诀
19
成单算移关与,异或逻条赋逗
□ 成员运算:("()",[ ],->,结构体成员.) □ 单目运算:(!,-,++,--,取值*,取址&,位取反~) □ 算术运算:(*,/,%)级别高于(+,-) □ 位移运算:(<<,>>) □ 关系运算:(>,>=,<,<=)级别高于(==,!=) □ 位与运算:(&) □ 位异或运算:(^) □ 位或运算:(|) □ 逻辑运算:(&&)级别高于(||) □ 条件运算:(? :) □ 赋值运算:(=,+=, ... ,<<=,>>=,&=,|=,^=) □ 逗号运算:(,)
4
其它进制转换为十进制
口诀:乘幂展开
(1011)2 = (1×23 + 0×22 + 1×21 + 1×20)10 = (11)10 (345)8 = (3×82 + 4×81 + 5×80)10 = (229)10 (A3C)16 = (10×162 + 3×161 + 12×160)10 = (2620)10
[2009.9.39]以下程序的运行结果是 int r = 8; printf("%d", r >> 1);
4
0 [2010.3.39]以下程序的运行结果是 int a = 2; printf("%d", a / a & a);
23
位运算4-4
[2010.9.40]填空,使程序运行结果为248 short c = 124; printf("%d", c ); A)>> 2 B)| 248 C)& 0248 D)<< 1 [2011.3.39]以下程序的运行结果是 unsigned char a = 8, c; c = a >> 3; printf("%d", c); [2011.9.38]以下程序的运行结果是 int a = 2, b; b = a << 2; printf("%d", b);
0101 1101 1001 1110 1100 1010 . 8421 十进制 16进制 5 D 9 E 1111 C15 A F . 010 111 011 001 111 011 001 010A . 1010 10 2 7 3 1 7 0110 1 3 6 2 6.
同理,八进制(或十六进制)数转换成二进制 1101 13 D 数,每1位展开成3位(或4位)二进制数。
7
详说整数
数据在计算机中以二进制存储,在VC++ 6.0 中,整数(int)占4个字节。 [2010.9.13]以下叙述中错误的是 1字节 = 8位2进制数 A)C程序在运行过程中所有计算都以二进制方 1Byte = 8Bits 式进行 1K = 1024Bytes B)C程序在运行过程中所有计算都以十进制方 1M = 1024K 式进行 1G = 1024M C)所有C程序都需要编译链接无误后才能运行 1T = 1024G D)C程序中整型变量只能存放整数,实型变量 只能存放浮点数
0 [2006.9.48]以下程序的运行结果是 int s = 32; s ^= 32; printf("%d", s);
21
位运算4-2
4 [2007.4.48]以下程序运行后,d的值是 unsigned char a = 2, b = 4, c = 5, d; d = a | b; d &= c; [2007.9.48]以下程序运行后,x的值是 int x = (1 ^ 2) & 3;
25,21,37 [2004.9.7]以下程序的运行结果是 int a = 25, b = 025, c = 0x25; printf("%d,%d,%d", a, b, c);
9
整型常量2-2
[2010.3.22]以下程序的运行结果是 int k = 011; printf("%d", k++); 9
8
整型常量2-1
a = 13,15,d,D [例]以下程序的运行结果是 int a = 13; printf("a = %d,%o,%x,%X", a, a, a, a); [2004.4.18]以下程序的运行结果是 int x = 102,y = 012; printf("%2d,%2d", x, y); 102,10
main() { int a, b; a = b = 4; a = a << 1; b = b >> 1; printf("%d, %d", } 32位 0000 ... 0100 0000 ... 1000 0000 ... 0010 a, b); 4 8 2
13
按位取反~
main() { 32位 int a, b; 0000 ... 0001 a = 1; 1111 ... 1111 b = ~a + 1; printf("%d, %d", a, b); }
24
1
8
打开、关闭文件
#include <stdio.h> a-append +-r&w main() r-read b-binary { w-write t-text FILE *fp; fp = fopen("a.txt", "wt"); fputs("Hello", fp); fclose(fp); a.txt }
27
文件16-2
[2005.4.50]运行后,t1.dat的内容是 end void WriteStr(char *fn, char *str) { FILE *fp; fp = fopen(fn, "w"); fputs(str, fp); fclose(fp); } main() { WriteStr("t1.dat", "start"); WriteStr("t1.dat", "end"); }
29
文件16-4
[2004.4.49]以下程序的运行结果是 FILE *fp; int i, k = 0, n = 0; fp = fopen("d1.dat", "w"); for (i = 1; i < 4; i++) fprintf(fp, "%d ", i); fclose(fp); fp = fopen("d1.dat", "r"); fscanf(fp, "%d%d", &k, &n); printf("%d,%d\n", k, n); fclose(fp);
二进制 十进制
备注 231-1 -231
0000 0111 1000 1111
11
.... .... .... ....
0000 1111 0000 1111
0 2147483647 -2147483648 -1
位运算符
位左移
<<
&
位与
位右移
>>
位运算
|
位或
位取反
~
^
位异或
12
位左移<<、位右移>>
30
1,2
文件16-5
[2005.9.50]以下程序的运行结果是 1,2 FILE *fp; int i, k, n; fp = fopen("data.dat", "w+"); for (i = 1; i < 6; i++) { fprintf(fp, "%d ", i); if (i % 3 == 0) fprintf(fp, "\n"); } rewind(fp); fscanf(fp, "%d%d", &k, &n); printf("%d,%d", k, n); fclose(fp);
和 0 与置 0,和 1 与不变
15
位或 |
全0才0 main() { 32位 int a, b, c; a = 0xf0; 0000 ... 1111 0000 b = 0x55; 0000 ... 0101 0101 c = a | b; 0000 ... 1111 0101 printf("%x", c); }
和 1 或置 1,和 0 或不变
16
位异或 ^
不同为 1,相同为 0 main() { 32位 int a, b, c; a = 0xf0; 0000 ... 1111 0000 b = 0x55; 0000 ... 0101 0101 c = a ^ b; 0000 ... 1010 0101 printf("%x", c); }
负数 = 正数取反 + 1
1 -1
14
位与&
全1才1 main() { 32位 int a, b, c; a = 0xf0; 0000 ... 1111 0000 b = 0x55; 0000 ... 0101 0101 c = a & b; 0000 ... 0101 0000 printf("%x", c); }
3
[2008.4.38]a中的数据用二进制表示的形式是 01011101,b的数据二进制形式是11110000, 要将a的高4位取反,低4位不变,需执行 A)a ^ b B)a | b C)a 百度文库 b D)a << 4
22
位运算4-3
[2008.9.39]以下程序的运行结果是 8 char a = 4; printf("%d", a = a << 1); 21 [2009.3.39]以下程序运行后,t的值是 int a = 5, b = 1, t = (a << 2) | b;
Lesson 14
位运算与文件
mtysoft@163.com
本课内容
整型常量与数制转换 6 个位运算符 C 运算符完整口诀 FILE 与文件操作权限
13 个文件操作函数
2
3
常用数制
常用数制、整型常量 及格式符
十进制 十六进制
八进制
二进制
没有二进制 常量
格式符%o, 常量以0开 头,如023
格式符%x或 格式符%d, %X,常量都 常量无前缀, 以0x或0X开 如234 头,如0x3A
[2010.9.6]以下程序的运行结果是 int a = 200, b = 010; printf("%d%d", a, b); [2011.3.18]以下程序的运行结果是 int x = 011; printf("%d", ++x);
10
2008
10
整数有范围
黄氏定理二:整数有范围,最大的正 整数加一,等于最小的负整数。 ★公式表示:2147483647 + 1 = -2147483648
20
位运算4-1
[2005.4.36]以下程序的运行结果是 int c = 35; printf("%d", c & c); 35
4,3 [2005.9.49]以下程序的运行结果是 unsigned char a = 7 ^ 3, b = ~4 & 3; printf("%d,%d", a, b); 9 [2006.4.28]以下程序运行后,c的值是 int a = 1, b = 2, c = a ^ (b << 2);