C语言入门6(内部资料).pdf

C语言 C语言入门教程 (6) C++语言 高薪就业 传智播客 C语言课程概述 C语言入门教程 (6)大纲 1.穷人时代如何节约内存——位运算 2.不仅仅局限于内存——文件 3.灵活却难以理解——指针进阶 4.更深入的理解——函数进阶 5. 生存期、作用域与可见域. 6.初学者的疑难解答 传智播客 6.1穷人时代如何节约内存位运算 n 伟大的比尔盖茨在DOS时代曾经有过这样的说 法 “640K的内存对一般人来说已经足够”,可 现在的电脑内存动辄就是1G、2G,且不评判 上述那句话的正误,但从日新月异的硬件发展 来看,我们就能猜出二三十年前的程序员是如 何在内存使用上精打细算的,与之相比,现代 程序员好像少了很多烦恼,内存似乎永远用不 完,但内存再大,也要精打细算,从位运算的 角度看一下如何合理节约内存的使用。 传智播客 6.1.1什么是位运算 n 从开始到现在,经常出现的一个词是内存单 元,即1B,我们说char型占1个内存单元 (1B),而short型占2个内存单元 (2B)。 1B被当成整体来看,但不要忘记有下面的 等式成立: n 1 B 8 bits n 1个字节有8个位,每个位有0、1两个取值, 从这个角度上说,1个字节所能包含的意义 似乎比预想的要大的多。 传智播客 6.1.2开灯关灯 n 举例来说,房间里有8盏灯,为了控制每盏灯的亮灭,可以声明8 个Byte变量,变量为0代表灯灭,变量非0代表灯亮,这完全行 得通,而且看起来很有效率。 n 能否换种角度思考,能不能只有1个字节的8个位来控制8盏灯? 该位为0代表灯灭,该位为1代表灯亮,答案是 “可以”,比较两 种方法,发现使用位操作的方式有效节省了内存,如所示: 传智播客 6.1.3改变状态 假设某个时刻,灯1和灯2亮,而其他灯都灭,此时控制字为 想变换下状态,让灯1和灯3亮, 其他灯灭,目标 控制字只要赋值给该单元即可。 问题又来了,如果原来不知道哪几盏灯亮哪几盏灯灭,现在 还是想让第3盏灯亮起来,赋值操作看来是行不通了,要如何 做呢? 在这个背景下,位运算的概念被提出,即能否只改变控制第3 盏灯的那一位的状态?本章的剩余章节将结合开灯关灯这一 场景讲述位运算的内容。 总体来说,C语言中的位运算符有以下两类: 位逻辑运算符: (位 “与”)、^ (位 “异或”)、| (位 “ 或”)、~ (位 “取反”)。 移位运算符: (左移)、 (右移) 传智播客 6.1.4位逻辑运算符 n 大家现在对逻辑运算已经不陌生了,位逻辑 运算的原理与普通逻辑运算基本一致,不同 在于普通的逻辑运算以变量为单位,而位逻 辑运算以位 (bit)为单位,先从最简单的位 取反运算说起。

文档评论(0)

1亿VIP精品文档

相关文档