第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。

Slides:



Advertisements
Similar presentations
首 页 首 页 上一页 下一页 本讲内容 投影法概述三视图形成及其投影规律平面立体三视图、尺寸标注 本讲内容 复习: P25~P31 、 P84~P85 作业: P7, P8, P14[2-32(2) A3 (1:1)]
Advertisements

第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
退 出退 出退 出退 出 上一页 下一页 仪器使用 §1-2 尺规绘图工具和仪器的使用方法 图板丁字尺三角板 比例尺圆规分规铅笔曲线板。 要提高绘图的准确度和绘图效率,必须正确地使用各种绘图工 具和仪器。常用的手工绘图工具和仪器有图板、丁字尺、三角板、 比例尺、圆规、分规、铅笔、曲线板等。 提示:将光标放在仪器上,
概率统计( ZYH ) 节目录 2.1 随机变量与分布函数 2.2 离散型随机变量的概率分布 2.3 连续型随机变量的概率分布 第二章 随机变量及其分布.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
细分曲面 傅孝明 SA 目录 细分曲面的基本思想 两个关键问题 一些基本概念 几种简单的细分曲面算法 细分曲面方法分类.
一、拟合优度检验 二、变量的显著性检验 三、参数的置信区间
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
主要内容  LR(0) 分析. 0 S→  E # E→  E+T E→  T T→  id T→  ( E ) 1 S→E  # E→E  +T 5 T→id  3 E→E+  T T→  id T→  (E) 4 E→E+T  9 E→T  6 T→(  E) E→
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
2.1 结构上的作用 作用及作用效应 作用的分类 荷载分类及荷载代表值.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
计算机文化基础 第 13 章 多表操作. 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式.
1 第二章 误差和分析数据的处理. 2 ● 内容提要 1. 误差及其产生原因 2. 准确度与精密度 3. 有效数字及其计算规则 4. 分析数据的处理.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十八讲 ) 离散数学. 第八章 格与布尔代数 §8.1 引 言 在第一章中我们介绍了关于集 合的理论。如果将 ρ ( S )看做 是集合 S 的所有子集组成的集合, 于是, ρ ( S )中两个集合的并 集 A ∪ B ,两个集合的交集.
第十一章 曲线回归 第一节 曲线的类型与特点 第二节 曲线方程的配置 第三节 多项式回归.
第二部分 行政法律关系主体 第一节 行政主体 一、行政主体 (一)行政主体的概念 cc (二)行政主体资格含义及构成要件 CASE1CASE1\CASE2CASE2 (三)行政主体的职权和职责 1 、行政职权的概念及内容 2 、行政职权的特点 3 、行政职责.
第三章 C 数据及其表达式 2 回顾  程序是为执行一项任务而编写的有序指令集  算法是解决问题的具体方法和步骤  流程图是算法的图形化表现形式  C 程序的编译和运行过程  编译器将源程序转换成机器能理解的程序  连接器用于连接相关的目标文件以生成可执行程序  进制间的转换  补码.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第三十九讲 ) 离散数学. 例 设 S 是一个集合, ρ ( S )是 S 的幂集合,集合 的交( ∩ ),并(∪)是 ρ ( S )上的两个代数运算, 于是,( ρ ( S ), ∩ ,∪) 是一个格。而由例 知.
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
第六章 文件管理. 程序设计中,文件是十分重要的,许多情况下, 使用文件可以高效地解决实际问题。有用的数据在后 备存储器上以文件的形式存储后,我们就可以通过文 件对数据进行访问、操作以及检索,这称为文件管理。 6.1 文件的分类 根据文件访问类型的不同,可以将文件分为三类: 顺序文件、随机文件和二进制文件。
量子化学 第四章 角动量与自旋 (Angular momentum and spin) 4.1 动量算符 4.2 角动量阶梯算符方法
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 5 章 解线性方程组的直接法 实际中,存在大量的解线性方程组的问题。很多数值方 法到最后也会涉及到线性方程组的求解问题:如样条插值的 M 和.
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
1 学籍归档工作 年学籍归档工作安排 从 2008 年开始,改为按届移交档案 从 2008 年开始,改为按届移交档案 今年的归档工作范围: 今年的归档工作范围: 2014 年应届毕业班级 2014 年应届毕业班级 2014 年办理毕业证的往届生。 2014 年办理毕业证的往届生。 整理内容:根据.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
第5章 键盘与鼠标接口 5.1 键盘概述 5.2 键盘的工作原理 5.3 PC扩展键盘接口 5.4 键盘中断与键盘I/O 5.5 鼠标接口.
量子力学教程 ( 第二版 ) 3.4 连 续 谱 本 征 函 数 的 归 一 化 连续谱本征函数是不能归一化的 一维粒子的动量本征值为的本征函数 ( 平面波 ) 为 可以取 中连续变化的一切实数值. 不难看出,只要则 在量子力学中, 坐标和动量的取值是连续变化 的 ; 角动量的取值是离散的.
第二章 处理器管理 南通大学电子信息学院 2010 年 9 月. 第二章 处理器管理 2.1 中央处理器 2.2 中断技术 2.3 进程及其实现 2.4 线程及其实现 2.5 Linux 进程和线程 2.6 Windows 2003 进程和线程 2.7 处理器调度 2.8 作业的管理与调度 2.9.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
§8-3 电 场 强 度 一、电场 近代物理证明:电场是一种物质。它具有能量、 动量、质量。 电荷 电场 电荷 电场对外的表现 : 1) 电场中的电荷要受到电场力的作用 ; 2) 电场力可移动电荷作功.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
习题课( 1 ) 进程管理及调度. 复习 进程概念、描述及状态 进程概念、描述及状态 进程的同步与互斥及应用 进程的同步与互斥及应用 管程机制 管程机制 进程通信 进程通信 进程调度算法 进程调度算法 进程死锁 进程死锁 线程 线程.
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
1-4 节习题课 山东省淄博第一中学 物理组 阚方海. 2 、位移公式: 1 、速度公式: v = v 0 +at 匀变速直线运动规律: 4 、平均速度: 匀变速直线运动 矢量式 要规定正方向 统一单位 五个量知道了三 个量,就能求出 其余两个量 3 、位移与速度关系:
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
Chapter Two– Data Numbering & Character Encoding System in Microcomputer Principles of Microcomputers 2015年10月22日 2015年10月22日 2015年10月22日 2015年10月22日 2015年10月22日.
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
名探柯南在侦查一个特大盗窃集团过程 中,获得藏有宝物的密码箱,密码究竟 是什么呢?请看信息: ABCDEF( 每个字 母表示一个数字 ) A :是所有自然数的因数 B :既有因数 5 ,又是 5 的倍数 C :既是偶数又是质数 D :既是奇数又是合数 EF :是 2 、 3 、 5 的最小公倍数.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
第四章 计算机数控( CNC )系统  本章重点:  1 计算机数控系统构成及其结构特点  2 运动轨迹插补原理  3 刀具补偿.
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
请同学们仔细观察下列两幅图有什么共同特点? 如果两个图形不仅形状相同,而且每组对应点所在的直线 都经过同一点, 那么这样的两个图形叫做位似图形, 这个点叫做位 似中心.
企业产品标准信息公共服务平台 操作介绍 目录 一 、系统架构介绍 二 、企业产品标准自我声明填报系统 三 、企业产品标准公示系统.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
7 生产费用在完工产品与在产 品之间分配的核算. 2 第七章 生产费用在完工产品与在产品之 间的分配  知识点 :  理解在产品的概念  掌握生产费用在完工产品与在产品之间的分 配.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
一、 版 面 构 成 的 概 念 版 面 构 成 的 概 念 二、 版 面 构 成 的 发 展 趋 势 版 面 构 成 的 发 展 趋 势 三、 广 告 文 字 的 版 面 构 成 广 告 文 字 的 版 面 构 成 四、 广 告 版 面 的 视 觉 流 程 广 告 版 面 的 视 觉 流 程.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
§9. 恒定电流场 第一章 静电场 恒定电流场. 电流强度  电流:电荷的定向移动  正负电荷反方向运动产生的电磁效应相同 ( 霍尔效应 特例 ) 规定正电荷流动的方向为正方向  电流方向:正方向、反方向  电流强度 ( 电流 ) A 安培 标量 单位时间通过某一截面的电荷.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
本章讨论有限自由度结构系统,在给定载荷和初始条件激励下的系统动力响应计算方法。 第 六 章
单元四 电动后视镜控制电路. 汽车辅助装置汽车辅助装置 一、教学目的要求: 掌握电动后视镜的组成、功用、工作过程以 及控制电路 二、主要教学内容: ( 1 )电动后视镜的组成 ( 2 )电动后视镜控制电路 ( 3 )电动后视镜工作过程 三、教学重点、难点: 电动后视镜工作过程.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
高 频 电 子 线 路高 频 电 子 线 路 主讲 元辉 5.5 晶体振荡器 石英晶体振荡器的频率稳定度 1 、石英晶体谐振器具有很高的标准性。 、石英晶体谐振器与有源器件的接入系数通常近似 如下 受外界不稳定因素的影响少。 3 、石英晶体谐振器具有非常高的值。 维持振荡频率稳定不变的能力极强。
Presentation transcript:

第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。

12.1 数值在计算机中的表示 1. 二进制位与字节 计算机系统的内存储器,是由许多称为字节的单元组 成的, 1 个字节由 8 个二进制位( bit )构成,每位的取值为 0/1 。最右端的那 1 位称为 “ 最低位 ” ,编号为 0 ;最左端的那 1 位称为 “ 最高位 ” ,而且从最低位到最高位顺序,依次编号。 图 11-1 是 1 个字节各二进制位的编号。 图 个字节各二进制位的编号 2. 数值的原码表示 数值的原码表示是指,将最高位用作符号位( 0 表示正 数, 1 表示负数),其余各位代表数值本身的绝对值(以二 进制形式表示)的表示形式。为简化描述起见,本节约定 用 1 个字节表示 1 个整数 。

例如, +9 的原码是 └→ 符号位上的 0 表示正数 -9 的原码是 。 └→ 符号位上的 1 表示负数 3. 数值的反码表示 数值的反码表示分两种情况: ( 1 )正数的反码:与原码相同。 例如, +9 的反码是 。 ( 2 )负数的反码:符号位为 1 ,其余各位为该数绝 对值的原码按位取反( 1 变 0 、 0 变 1 )。 例如, -9 的反码:因为是负数,则符号位为 “1” ;其 余 7 位为 -9 的绝对值 +9 的原码 按位取反为 , 所以 -9 的反码是 。

4. 数值的补码表示 数值的补码表示也分两种情况: ( 1 )正数的补码:与原码相同。 例如, +9 的补码是 。 ( 2 )负数的补码:符号位为 1 ,其余位为该数绝对值 的原码按位取反;然后整个数加 1 。 例如, -9 的补码:因为是负数,则符号位为 “1” ;其余 7 位为 -9 的绝对值 +9 的原码 按位取反为 ;再 加 1 ,所以 -9 的补码是 。 已知一个数的补码,求原码的操作分两种情况: ( 1 )如果补码的符号位为 “0” ,表示是一个正数,所 以补码就是该数的原码。 ( 2 )如果补码的符号位为 “1” ,表示是一个负数,求 原码的操作可以是:符号位不变,其余各位取反,然后再 整个数加 1 。

例如,已知一个补码为 ,则原码是 ( -7 ):因为符号位为 “1” ,表示是一个 负数,所以该位不变,仍为 “1” ;其余 7 位 取反后为 ;再加 1 ,所以是 。 5. 数值在计算机中的表示 ── 补码 在计算机系统中,数值一律用补码表示(存 储),

12.2 位 运 算 位运算及其运算符 1 .按位与 ──& (1) 格式: x&y (2) 规则:对应位均为 1 时才为 1 ,否则为 0:3&9=1 。 例如, 3&9=1 : 0011 & 1001 ──── 0001=1 (3) 主要用途:取 ( 或保留 )1 个数的某 ( 些 ) 位,其余各位置 0 。 2 .按位或 ──| (1) 格式: x|y (2) 规则:对应位均为 0 时才为 0 ,否则为 1 : 3|9=11 。 例如, 3|9=11 : 0011 | 1001 ──── 1011=11 (3) 主要用途:将 1 个数的某 ( 些 ) 位置 1 ,其余各位不变。

3 .按位异或 ──^ (1) 格式: x^y (2) 规则:对应位相同时为 0 ,不同时为 1 : 3^9=10 。 (3) 主要用途:使 1 个数的某 ( 些 ) 位翻转 ( 即原来为 1 的位 变为 0 ,为 0 的变为 1) ,其余各位不变。 4 .按位取反 ──~ (1) 格式: ~x (2) 规则:各位翻转,即原来为 1 的位变成 0 ,原来为 0 的 位变成 1 :在 IBM-PC 机中, ~0 = 0xffff , ~9=0xfff6 。 (3) 主要用途:间接地构造一个数,以增强程序的可移 植性。 5 .按位左移 ──<< (1) 格式: x<< 位数 (2) 规则:使操作数的各位左移,低位补 0 ,高位溢出: 5<<2=20 。

6 .按位右移 ──>> (1) 格式: x>> 位数 (2) 规则:使操作数的各位右移,移出的低位舍弃; 高位: 1) 对无符号数和有符号中的正数,补 0 ; 2) 有符号数中的负数,取决于所使用的系统:补 0 的 称为 “ 逻辑右移 ” ,补 1 的称为 “ 算术右移 ” 。例如, 20 >> 2=5 。 说明: ( 1 ) x 、 y 和 “ 位数 ” 等操作数,都只能是整型或字符 型数据。除按位取反为单目运算符外,其余均为双目运 算符。 ( 2 )参与运算时,操作数 x 和 y ,都必须首先转换成 二进制形式,然后再执行相应的按位运算。 例如, 5 > 2=5 : → 。

( 3 )实现 & 、 | 、 ^ 运算主要用途的方法 1 )构造 1 个整数:该数在要取(或保留)的位、或 要置 1 的位、或要翻转的位上为 1 ,其余均为 0 。 2 )进行按位与、或按位或、或按位异或操作。 ( 4 )实现按位取反主要用途的方法 1 )求 ~0 ,间接地构造一个全 1 的数; 2 )按需要进行左移或右移操作,构造出所需要的数。 例如,直接构造一个全 1 的数,在 IBM-PC 机中为 0xffff ( 2 字节),而在 VAX-11/780 上,却是 0xffffffff ( 4 字节)。如果用 ~0 来构造,系统可以自动适应。具体应 用,请参见 [ 案例 11.1] 。 应用举例 [ 案例 11.1] 从键盘上输入 1 个正整数给 int 变量 num ,输 出由 8 ~ 11 位构成的数(从低位、 0 号开始编号)。

基本思路: ( 1 )使变量 num 右移 8 位,将 8 ~ 11 位移到低 4 位上。 ( 2 )构造 1 个低 4 位为 1 、其余各位为 0 的整数。 ( 3 )与 num 进行按位与运算。 /* 案例代码文件名: AL11_1.C*/ /* 程序功能:输出一个整数中由 8 ~ 11 位构成的数 */ main() { int num, mask; printf("Input a integer number: "); scanf("%d",&num); num >>= 8; /* 右移 8 位,将 8 ~ 11 位移到低 4 位上 */ mask = ~ ( ~0 << 4); /* 间接构造 1 个低 4 位为 1 、其余各位为 0 的整数 */ printf("result=0x%x\n", num & mask); }

程序运行情况: Input a integer number:1000 ←┘ result=0x3 程序说明: ~ ( ~0 << 4) 按位取 0 的反,为全 1 ;左移 4 位后,其低 4 位为 0 ,其 余各位为 1 ;再按位取反,则其低 4 位为 1 ,其余各位为 0 。 这个整数正是我们所需要的。 [ 案例 11.2] 从键盘上输入 1 个正整数给 int 变量 num ,按 二进制位输出该数。 /* 案例代码文件名: AL11_2.C*/ /* 程序功能:按二进制位输出一个整数 */

#include "stdio.h" main() { int num, mask, i; printf("Input a integer number: "); scanf("%d",&num); mask = 1<<15; /* 构造 1 个最高位为 1 、其余各位为 0 的整数 ( 屏蔽字 )*/ printf("%d=", num); for(i=1; i<=16; i++) { putchar(num&mask ? ’1’ : ‘0’);/* 输出最高位的值 (1/0)*/ num <<= 1; /* 将次高位移到最高位上 */ if( i%4==0 ) putchar(‘,’); /* 四位一组,用逗号分开 */ } printf("\bB\n"); }

程序运行情况: Input a integer number:1000 ←┘ 1000=0000,0011,1110,1000B 说明 1. 复合赋值运算符 除按位取反运算外,其余 5 个位运算符均可与赋值运算 符一起,构成复合赋值运算符: &= 、 |+ 、 ^= 、 >= 2. 不同长度数据间的位运算 ── 低字节对齐,短数的高 字节按最高位补位: ( 1 )对无符号数和有符号中的正数,补 0 ; ( 2 )有符号数中的负数,补 1 。

12.3 位段简介 有时,存储 1 个信息不必占用 1 个字节,只需二进制的 1 个(或多 个)位就够用。如果仍然使用结构类型,则造成内存空间的浪费。 为此, C 语言引入了位段类型。 1. 位段的概念与定义 所谓位段类型,是一种特殊的结构类型,其所有成员均以二进 制位为单位定义长度,并称成员为位段。 例如, CPU 的状态寄存器,按位段类型定义如下: struct status { unsigned sign: 1; /* 符号标志 */ unsigned zero: 1; /* 零标志 */ unsigned carry: 1; /* 进位标志 */ unsigned parity: 1; /* 奇偶 / 溢出标志 */ unsigned half_carry: 1; /* 半进位标志 */ unsigned negative: 1; /* 减标志 */ } flags;

显然,对 CPU 的状态寄存器而言,使用位段类型(仅需 1 个字节),比 使用结构类型(需要 6 个字节)节省了 5 个字节。 2. 说明 ( 1 )因为位段类型是一种结构类型,所以位段类型和位段变量的定义, 以及对位段(即位段类型中的成员)的引用,均与结构类型和结构变量一 样。 ( 2 )对位段赋值时,要注意取置范围。一般地说,长度为 n 的位段,其 取值范围是: 0 ~( 2 n -1 )。 ( 3 )使用长度为 0 的无名位段,可使其后续位段从下 1 个字节开始存储。 例如, struct status { unsigned sign: 1; /* 符号标志 */ unsigned zero: 1; /* 零标志 */ unsigned carry: 1; /* 进位标志 */ unsigned : 0; /* 长度为 0 的无名位段 */ unsigned parity: 1; /* 奇偶 / 溢出标志 */ unsigned half_carry: 1; /* 半进位标志 */ unsigned negative: 1; /* 减标志 */ } flags;

原本 6 个标志位是连续存储在 1 个字节中的。 由于加入了 1 个长度为 0 的无名位段,所以其后的 3 个位段,从下 1 个字节开始存储,一共占用 2 个 字节。 ( 4 ) 1 个位段必须存储在 1 个存储单元(通常 为 1 字节)中,不能跨 2 个。如果本单元不够容纳 某位段,则从下 1 个单元开始存储该位段。 ( 5 )可以用 %d 、 %x 、 %u 和 %o 等格式字符, 以整数形式输出位段。 ( 6 )在数值表达式中引用位段时,系统自动 将位段转换为整型数。