C语言程序设计(第三版)高禹 第11章位运算_第1页
C语言程序设计(第三版)高禹 第11章位运算_第2页
C语言程序设计(第三版)高禹 第11章位运算_第3页
C语言程序设计(第三版)高禹 第11章位运算_第4页
C语言程序设计(第三版)高禹 第11章位运算_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 11章 位运算 第 1页 第 11章 位运算 本章概述 本章的学习目标 主要内容 第 11章 位运算 第 2页 本章概述 位运算。 二进制位简称位( 其值为 0或 1。计算机真正执行的正是由 0和 1构成的机器指令,计算机内数据也是由二进制表示的。 数在计算机内均是以补码的形式存储的 。 本章介绍位运算和位段结构的有关知识。 第 11章 位运算 第 3页 本章的学习目标 本章教学目的:理解位运算的概念,掌握基本位运算运算符的使用,理解位段的概念。 本章教学重点:基本位运算运算符的使用 本章教学难点:位段的概念 第 11章 位运算 第 4页 主要内容 位运算符 位运算 位运算应用举例 位段结构 第 11章 位运算 第 5页 位运算符 位运算符 功能 举例 按位取反 a:对变量 右移 a2:将变量 位,对于无符号数和正整数,高位补 0;对于负整数,高位补 1(适用于 & 按位与 a&b:对 a与 位与”运算 | 按位或 a|b:对 a与 位或”运算 按位异或 ab:对 a与 位异或”运算 第 11章 位运算 第 6页 位运算 取反运算“ ”是一个单目运算符,运算量在运算符之后,取反运算的功能是将一个数据中所有位都取其相反值,即 1变 0, 0变 1。 运算规则为: 1=0 0=1 例 对于无符号的字符型数据 a=( 18) 10 =( 00010010) 2 , 则 11101101)2 ,即 ( 237) 10 。 按位取反运算 第 11章 位运算 第 7页 # a=18,b; b=a; a=%d”,b); ; 运行结果为: a= 237 注意以下程序与左面程序及运行结果的区别: # a=18,b; b=a; a=%d”,b); ; 运行结果: 前一个程序结果很好理解,后一个因为 此 a=(11101101)2的结果是一负数的补码,转换为原码时,第 1位符号位不变,对剩余的部分先减 1,再全部取反,因此得到的二进制原码为: 10010011,即十进制的 第 11章 位运算 第 8页 位运算 左移运算 左移运算 “ a=18, b; b=a a=18,b; b=a”是一个双目运算符 , 右移运算的功能是将一个数据所有位向右移若干位 , 右边 ( 低位 ) 移出的部分舍去 , 左边 ( 高位 ) 移入的二进制数分两种情况:对于无符号数和正整数 , 高位补 0;对于负整数 , 高位补 1( 适用于 +,和 。 例 对于无符号字符型数据 a=( 18) 10 =( 00010010) 2 , 则 a 3的结果是 (00000010)2,即( 2) 10 。 第 11章 位运算 第 11页 # a=18, b; b=a3; a3=%d”,b); ; 运行结果为: a3=2 第 11章 位运算 第 12页 位运算 按位与运算 按位“与”运算符要求有两个运算量,其功能是将两个运算量的各个相应位分别进行“与”运算。 运算规则为 : 1&1=1 0&1=0 1&0=0 0&0=0 例 对于无符号数 a=(173)10=(10101101)2, b=(203)10=(11001011)2, 则 a&b = (10001001)2 =(137)10 10101101 & 11001011 10001001 第 11章 位运算 第 13页 例 对于有符号数 a=(0=(10101101)2 , b=(0=(11001011)2 , 则 a&b = (10001001)2 =(0 。 以上二进制形式是负数的补码。 # a=173,b=203,c; c=a&b; a&b=%d”,c); ; 运行结果为: a&b=137 10101101 & 11001011 10001001 # a=b=c; c=a&b; a&b=%d”,c); ; 运行结果为: a&b=语言程序设计 第 11章 位运算 第 14页 位运算 按位或运算 按位“或”运算符要求有两个运算量,其功能是将两个运算量的各个相应位分别进行“或”运算。 运算规则为 : 1|1=1 0|1=1 1|0=1 0|0=0 例 对于无符号数 a=(173)10=(10101101)2,b=(203)10=(11001011)2,则 a|b = (11101111)2 =(239)10 。 10101101 | 11001011 11101111 第 11章 位运算 第 15页 例 对于有符号数 a=(0=(10101101)2, b=(0=(11001011)2, 则 a|b = (11101111)2 =(0 。 # a=173,b=203,c; c=a|b; a|b=%d”,c); ; 运行结果: a|b=239 10101101 | 11001011 11101111 第 11章 位运算 第 16页 # a=b=c; c=a|b; a|b=%d”,c); ; 运行结果为: a|b= 语言程序设计 第 11章 位运算 第 17页 位运算 按位异或运算 按位 “ 异或 ” 运算符要求有两个运算量 , 其功能是将两个运算量的各个相应位分别进行 “ 异或 ” 运算 。 运算规则为 : 11=0 01=1 10=1 00=0 。 例 对于无符号数 a=(173)10=(10101101)2, b=(203)10=(11001011)2, 则 ab = (01101110)2 =(102)10 。 10101101 11001011 01100110 # a=173,b=203,c; c=ab; ab=%d”,c); ; 运行结果: ab=102 第 11章 位运算 在第 2章我们学习了一些常用的复合赋值运算符,结合前面的位运算符,还有 5种不常用的复合赋值运算符,它们分别是: =、 &=、 |=、 =。 它们的使用规则与第 2章所述的常用复合赋值运算符的使用规则相同。 例如: a i,n,b,a to ); %x,&n); %x ,n); i=0;i1; ; 运行情况: a to f f f f 00000000a to 127 127 0000001第 11章 位运算 第 23页 例 循环移位。 所谓循环移位是指:在移位时不丢失移位前原数据的所有位,将其作为另一端的补入位。 如:将 11110001循环右移 1位,应为 11111000。 11110001循环右移 3位,应为 00111110。 第 11章 位运算 第 24页 实现将无符号数 (1) 将 6 (2) 将 (3) 将 b与 运算”,则结果便为所需结果。 第 11章 位运算 第 25页 # n,a,b,c,d; a ); %x,&a); of to ); %d,&n); b=an; d=b|c; of x,d); ; 运行情况: a of to of 第 11章 位运算 第 26页 段结构 1. 位段结构的概念 位段结构是一种结构体类型,只不过是在结构体中含有以位为单位定义存储长度的成员。采用这种结构可以节省存储空间、方便某些特定的操作。 2 . 位段结构的定义 a : 2 ; /*占 2位 */ b : 1 ; /*占 1位 */ C: 3 ; /*占 3位 */ d : 2 ; /*占 2位 */ 位段结构中位段的定义: : 例如 第 11章 位运算 第 27页 其存储结构如下图: a : 2 ; /*占 2位 */ b : 1 ; /*占 1位 */ : 3 ; /*占 3位,无字段名,不能引用 */ d : 2 ; /*占 2位 */ 如果需要可以跳过某些不用的位 , 只要将这些位段不指定位段名就无法引用 。 例如: 第 11章 位运算 第 28页 如果某一位段为位数为 0的无名位段 , 则表示其下一个位段从另一个字节开始 。 还可以在一个结构体中混用位段与普通结构体成员 。 例如: i; /*非位段 , 占 2个字节 */ a : 2 ; /*占 2位 */ b : 1 ; /*占 1位 */ : 0 ; /*无名 , 0长度 , 则下位段从下字节开始 */ c : 2 ; /*从第 4个字节开始占 2位 */ 第 11章 位运算 第 29页 对位段的引用方法和引用结构体变量中的成员相同 ,例如,若即有: 则可以用后面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论