c语言设计(第二版)教学课件..ppt_第1页
c语言设计(第二版)教学课件..ppt_第2页
c语言设计(第二版)教学课件..ppt_第3页
c语言设计(第二版)教学课件..ppt_第4页
c语言设计(第二版)教学课件..ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

c c语言设计(第二版)语言设计(第二版) -教学教学课件课件 制作人: 黄 荧 制作人单位:河师大数学与信息科学学院 第十二章第十二章 位运算位运算( (按位运算按位运算) ) 几种关于二进制的按位运算: 1 按位与、按位或 2 异或、取反 3 左移、右移 4 位段 00000011 存放黑白两色也只需要1个数位. 即使存放8种颜色也仅只需要3个数位. 3 利用按位运算可以非常方便的从一个字节一个字节中读取和写入一个或 几个数位上的数据. 12.1 位运算符和位运算 ( (位位: :指的是指的是二进制二进制的位的位!)!) C语言提供的六种位运算: 说明: 1)除了取反运算以外,都是二元运算。 2)运算量只能是整型或字符型数据,不能是实型数据。 运算符含义运算符含义 b=b=b b a a; ; a=ab b=b(ab)=abb =a0=a 类似地:a=(ab)(b(ab)=aabbb=00b=b 12.1.4 “ “取反取反” ”运算符() (一元运算) 运算规则:0=1,1=0 如: 求025,其中025为整型数占占2 2个字节个字节。 025= (0000 0000 0001 0101)2 = (1111 1111 1110 1010)2 =0177752 特别注意:特别注意:取反的值是与其所占字节数取反的值是与其所占字节数 相关的相关的! “取反“运算的一个特殊应用 : 将一个数的最低位置零。将一个数的最低位置零。 当整数为16位: a int b=2; a=a; b=b; 所得到的结果是不同的。 12. 2 位运算举例 例12.1 取一个整数a从右端开 始的47位。 (注意到,内存中的最低位是0位。) 方法1:(最简单的方法) 右移4位,将所取位移至最低位 :b=a4; 取出最低4位: c=b 方法2: 将方法1的017用反运算表示。 构造017的要点是: 用反运算构造一个高位为0,低4位为1的数。 a) 从0开始,0=00000(可16位,也可32位) b) 取反:0=11111 (可16位,也可32位) c) 左移4位使低使低4 4位为位为0 0(可一般化为n):04; c=(0 void main ( ) unsigned a, b, c, d; scanf (“%o“, b=a4; c=(04; c=(0(m-n+1); (将第m位开始的n位移至最低位) 2) c=(0n (a为无符号数) 将b与c作按位或即得所求:c=c|b n位 a n位 b 例12.2 右循环位移 。(程序) #include void main() unsigned a,b,c; int n; printf(“Enter unsigned a, int n:n“); scanf(“%o %d“, b=an; c=c|b; printf (“%o %on“, a,c); 右循环位移方法: 取出a中低n位放在b中高n 位保存: b=an 将b与c作按位或即得所求 : c=c|b 12.3 位段 (位域) 位段位段是为了使一个字节中的数位 数位的读取更为方便直观更为方便直观而设置的 . 位段位段是结构体中特殊的成员,它们是以数位 数位来定义长度的,而 不是以字节。 如, struct packed_data unsigned a:2; /*成员a为一个占占2 2个二进制数位个二进制数位的位段位段。*/ unsigned b:6; /*b,c,d也为位段*/ unsigned c:4; unsigned d:4; int i; data; a b c d i data 如图所示(一小格代表2个数位): (共4个字节) 位段的引用 对段位可以象一般整型变量要样给它赋值,但需要注意的是:不不 要超出它的取值范围要超出它的取值范围。 如: struct packed_data unsigned a:2; unsigned b:3; unsigned c:4; int i; data; dataa=3 ; dataa=6 ; 因为a仅占2个二进制数位,最大存储的数值为3。(溢出错误溢出错误) 例 各位段长度之和可以不为整字节。 如, struct packed_data unsigned a:2; unsigned b:3; unsigned c:4; int i; data; (共4个字节) a b c 空闲(7) i data 如图所示(一小格代表2个数位): 三个位段共9个数位。 位段的定义和引用 的几点说明: (1-7) 1)位段成员的类型必须指定为unsigned或 int类型。 2)若某一位段要从另一个字开始,可以利用 长度为0的位段来实现(规定规定)。 c 空闲 a 12bit 4bit 14bit 如: unsigned a:1; unsigned b:2; unsigned :0; unsigned :0; unsigned c:3; 3)一个位段必须存储在同一个存储单元( 一个字,不是字节)中,不能跨两个存储不能跨两个存储 单元单元。 如:unsigned a:12; unsigned b:14; 4)可以定义无名位段。 5)位段的长度不能大于一个字长度不能大于一个字,也不 能定义位段数组。 6)可以用整型格式符输出 如,用%d,%o,%x,%u等格式输出 7)可以用于表达式中,它会被系统自 动转化为整型的。 a:1 空闲闲(2)c:3 如: unsigned a:1; unsigned :2; /*这两位不用*/ unsigned b:3; Ch12位

温馨提示

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

评论

0/150

提交评论