免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第章位运算C语言除了具有高级语言的功能以外,其一个重要特点是具有某些低级语言的功能,这主要表现在C语言有系统调用的功能,例如C程序能调用PC机BIOS中例行程序的int86()函数等。其次,C语言具有直接对C中的int和char类型的数据的某些字节或位进行操作的能力,这与汇编语言的位操作有些相似,例如按位取反等。.位运算符C语言提供的位运算符如表12.1所示。表12.1位运算符位运算符含义举例&按位与A&b,a和b中各位按位进行“与”运算|按位或a|b,a和b中各位按位进行“或”运算按位异或Ab,a和b中各位按位进行“异或”运算取反a,对a中各位取反左移A右移a2,a中各位全部右移位位运算还可以与赋值运算符相结合,成为位运算赋值操作。例如,a&=b,等价于a=a&b。下面分别介绍各运算符。.按位与运算符(&)按位与运算的运算规则是:参加运算的两个运算量,如果两对应位都是,则该位的结果为,否则为。例如,两个二进制数0101和1100按位与运算的结果为0100。例12.1计算和13两个十进制数按位与运算的结果。main()unsigned char a,b; a=8; b=13; printf(“%d&%d=%dn”,a,b,a&b);程序输出结果为:&13=8说明:程序中数a即的二进制形式为1000,数b即13的二进制形式为1101,两数按位相与的结果为1000即十进制数。.按位或运算(|)按位或运算的运算规则是:两个相应位中只要有一个为,该位的结果值为,只有两个相应位都为,该位的结果值才为。例如,有两个十六进制数10和34,运算情况如下所示:例12.2main()unsigned char a,b; printf(“enter two hex numbers:”); scanf(“%x”,&a); scanf(“%x”,&b); printf(“result:”); printf(“%x|%x=%02x”,a,b,a|b);程序运行情况如下:enter two hex numbers:10 34result:10|34=34.按位异或运算符()按位异或运算的运算规则是:参加运算的两个相应位同号,则结果为;异号则为。例如,有10和35两个十六进制数,运算情况如下所示:例12.3main()unsigned char a,b; printf(“enter two hex numbers:”); scanf(“%x”,&a); scanf(“%x”,&b); printf(“result:”); printf(“%x%x=%02x”,a,b,ab);程序运行情况如下:enter two hex numbers:10 35result:1035=25.取反运算符()取反运算的运算规则是:将一个数据中所有位都取其反值,即变,变。取反运算符()是一个单目运算符,运算量写在运算符之后。例如,十六进制数03(即二进制数00000011),按位取反后其值为十六进制数fc(即二进制数11111100)。.左移运算符()左移运算的运算规则是:将一个数的各二进制位全部左移若干位,最左边移出的位丢失,右边空出的位补。例如,a)右移运算的运算规则是:将一个数的各二进制位全部右移若干位,最右边移出的位丢失,左边空出的位的补位情况分为两种:() 对无符号的int或char类型数据来说,右移时左端补零。() 对有符号的int或char类型数据来说,如果符号位为(即正数),则左端也是补入,如果符号位为(即负数),则左端补入的全是。对于第一种情况,由于比较简单,这里不再举例说明。对于第二种情况,举例说明如下: 即十进制数-13。.位段C语言可以用以上介绍的位运算符访问位(bit),也可以用“位段”的方法来访问字节中的某些位。.位段的概念和定义方法位段又可称为“位字段”或“位域”,是一种特殊形式的结构体中的成员,以位为单位来定义结构体中的成员的长度。实际上它是字节中一些位的组合。下面举例说明位段的定义方法。例12.4位段定义方法举例。struct data1unsigned int a:3; /*占位*/unsigned int b:1; /*占1位*/unsigned int c:2; /*占2位*/unsigned int d:2; /*占2位*/x;上面定义了结构体类型struct data1和一个该类型的变量x。该类型的数据由a、b、c和d四个(位段)成员组成,它们分别占用3、1、2、2个二进制位,共一个字节。其分配情况如图12.1所示。图12.1位段分配图示在定义位段时,有以下几点需要说明:()定义位段时必须用unsigned int或int类型不能用char或其它类型。()在一个结构体中可以混合使用位段和通常的结构体成员。如:struct data2 int i; /*非位段*/ unsigned int a:3; /*位段*/ unsigned int b:1; /*位段*/ float f; /*非位段*/ ; ()如果某几个二进制位不用,可以将其定义成无名位段。如:struct data3unsigned int a:2; unsigned int :3; /*这位不用*/ unsigned int b:3;()可以指定某一个位段从下一个字节开始存放,而不是紧接着前面的位段存放。如下面定义的struct data4中,位段b后面定义了一个长度为的无名位段,它的作用是使下一个位段从另一个字节开始存放。如图12.2所示。struct data4 unsigned int a:2; unsigned int b:3; unsigned int :0; unsigned int c:4; ; 图12.2.位段的引用方法对位段的引用与引用结构体变量中的成员的方法相同。例如对例12.4中定义的位段的引用方法如下:x.a, x.b, x.c, x.d可以对位段赋值,在赋值时要注意位段数据必须在它所能表示的范围内。例如:x.a=7; x.b=1; x.c=2; x.d=0;可以用指针变量指向一个成员为位段的结构体变量,可以引用此结构体变量的地址,也可以通过指针变量来引用位段,但不能引用位段的地址。例如:p=&x; /*使p指向结构体变量x*/ printf(“%d”,p-a); /*输出p所指向的结构体中的位段a*/ p=&x.a; /*错误*/ 位段是很有用的。有时存储一个信息不必用一个或多个字节,可以一个字节中存放几个信息。例如,“真”和“假”(即和)这样的信息只需一位就可以存放了。在控制系统中需要经常对寄存器的某些位进行操作,C语言提供的位段处理功能可以方便地解决这些问题。本章小结本章对C语言的位运算及位段进行了简单的介绍。位运算可以对字节中的指定位进行操作,位段则允许以位为单位定义和访问数据。对位段的操作比用位运算符方便,而且可移植性好,效率高。实验十六位运算一、实验目的 了解位运算及位段的概念,掌握位运算符的使用方法; 学会通过位运算实现对某些位的操作。二、实验内容题目.阅读程序,给出输入值20和9时的a,b,c,d的最后结果。main()unsigned int a,b,c,d; scanf(“%d”,&a); b=a2; c=-(-b4); d=b&c; printf(“%d,%d,%d,%dn”,a,b,c,d);程序的执行结果为:2020,5,80,09,2,32,0题目.编程实现使一个数的低位“翻转”,即使其低位“1”变“0”,“”变“”。提示:与二进制数00001111按位异或运算。习题十二一、选择题已知char a=15,则a、-a、!a的整型值分别是()。A240,-15,0 B-16,-15,0 C0,-15,240 D0,-15,0整型变量x和y的值相等且为非值,则以下选项中,结果为零的表达式是()。Ax|y Bx|y Cx&y Dxy 有以下程序main()unsigned char a,b,c; a=0x3; b=a|0x8; c=b1; printf(“%d%dn”,b,c);程序运行后的输出结果是()。A-11 12 B-6 -13 C12 24 D11 22语句printf(“%dn”,12&012);的输出结果是()。A12 B8 C6 D012以下程序的输出结果是()。main()unsigned int x=3,y=10; printf(“%dn”,x1);A1 B5 C12 D13二、填空题设二进制数a是00101101,若想通过异或运算ab使a的高位取反,低位不变,则二进制数b应是。程序执行时输入61,输出的结果是。main() unsigned char a,b; scanf(“%x”,&a); b=a2; printf(“%xn”,b);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年杭州市余杭公共交通有限公司招聘真题
- 2025年眉山市内考调公务员真题
- 教师延时服务不到位个人整改措施
- 教师职业道德培训实施方案
- 机关干部人事档案管理制度
- 机关普法宣传不到位整改措施
- 机关财务管理制度
- 烟台奥业盛物流仓储项目环评报告表
- 学校感恩教育主题班会模板
- 天津事业编试题及答案
- 2026年广西社区工作者招聘考试笔试试题(含答案)
- 2026秋新教科版科学五年级上册教学课件:第四单元 第5课 岩石的类别与变化 有2个微课视频
- 成都未来科技城发展服务局2026年社会招聘笔试题库有答案详解
- 2026年机关事业单位考调、选调工作人员考试(综合知识、综合应用能力测试)模拟试题及解析(甘孜州)
- 雨课堂学堂在线学堂云《内科学(白城医学高等专科学校)》单元测试考核答案
- 2026年新水利安全员b证考试试题及答案
- 2026年舞台展台搭建安全责任书
- 二年级上册数学【应用题乘法】80题(含答案)
- 26年云南会计专升本试题及答案
- 冷库管理制度及流程规范
- 书稿排版格式
评论
0/150
提交评论