C语言程序设计 第12章 位运算.ppt

C语言程序设计 第12章 位运算.ppt

ID:50083790

大小:154.50 KB

页数:23页

时间:2020-03-08

C语言程序设计 第12章 位运算.ppt_第1页
C语言程序设计 第12章 位运算.ppt_第2页
C语言程序设计 第12章 位运算.ppt_第3页
C语言程序设计 第12章 位运算.ppt_第4页
C语言程序设计 第12章 位运算.ppt_第5页
资源描述:

《C语言程序设计 第12章 位运算.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第12章位运算主要内容位运算符与位运算位段程序案例小结习题第页12-1位运算符与位运算“按位与”运算“按位或”运算“按位异或”运算“按位取反”运算“左移”运算“右移”运算位运算赋值运算符第页位运算符注意:位运算的数据对象只能是C标准中的char和int数据类型,而不能用于float、double、longdouble、void和其他复杂类型。第页12-1-1“按位与”运算C语言规定按位与的运算规则为:如果参与运算的两个整数或字符按照二进制位对齐,相应的两位进行“与”运算,对应两位都是1时,结果为1,否则只要有0出现的位,其对应的二进

2、制位与的结果都为0。格式为:a&b显然,任何数与0进行按位与运算的结果为0,与-1(二进制位全为1)进行按位与运算的结果为其本身。第页注意不可将运算符“&”与运算符“&&”混淆。对于运算符“&&”,当两边操作数为非0值时,表达式的运算结果为1;但对于运算符“&”,则需要对每位进行与运算。第页12-1-2“按位或”运算按位或的运算规则为:如果参与运算的两个整数或字符按照二进制位对齐,相应的两位进行“或”运算,对应两位都是0时,结果为0,否则只要有1出现的位,其对应的二进制位或的结果都为1。格式为:a

3、b第页12-1-3“按位异或”运算

4、按位异或的运算规则为:如果参与运算的两个整数或字符按照二进制位对齐,相应的两位进行“异或”运算,对应两位相同时,结果为0,否则为1。格式为:a^b第页12-1-4“按位取反”运算按位取反的运算规则为:将一个数中的各位二进制数取反,即0变为1,1变为0。按位取反运算是单目运算。格式为:~a第页12-1-5“左移”运算左移运算的运算规则为:将运算对象中的每个二进制位向左移要求的位数,从左边移出去的高位部分被丢弃,右边空出的部分用0填补。格式为:a<<整型表达式;第页12-1-6“右移”运算右移运算的运算规则为:将运算对象中的每个二进制位

5、向右移要求的位数,从右边移出去的低位部分被舍弃,对无符号的数来说,左边空出的部分补0;对有符号数来说,如果符号位为0,则空出的高位部分补0,符号位为1则补1。这是TurboC和其他一些C编译采用的。格式为:a>>整型表达式;第页12-1-7位运算赋值运算符位运算符与赋值运算符可以组成复合赋值运算符,位运算赋值运算符共有5种:&=

6、=^=<<=>>=第页12-2位段内存中信息的存取一般以字节为单位。在计算机用于过程控制、参数检测或数据通信等领域时,控制信息往往只占一个字节中的一个或几个二进制位,如“真”或“假”用0或1表示,只需1位即

7、可。因此,一个字节常常可以存放几个信息。那么,怎样向一个字节中的一个或几个二进制位赋值以及改变它的值呢?这就要用到位段(bitfield)。当然也可以在一个字节中人为地设置几项,但给其中某几位赋值太麻烦。不如用位段结构体的方法方便。C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”。利用位段能够用较少的位数存储数据。第页位段的定义方法如下structbit_data{unsignedinta:1;unsignedintb:1;unsignedintc:2;unsignedintd:

8、4;unsignedinte:8;inti;}data;上面定义了位段结构类型structbit_data,它包含6个成员,又称位段,如下图所示。其中a、b、c、d、e分别为1位、1位、2位、4位、8位,i为整型,占2个字节16位。共占4个字节。第页接上第页12-3程序案例【例】设计一个函数,给出一个数的十六进制原码,得到该数的十六进制补码。分析:根据补码的定义,一个正数的补码等于该数的原码,一个负数的补码等于该数的反码加1。假设a为16位整数,则步骤为:判别给定整数是正数还是负数。方法是:语句z=a&0x8000;中若z等于0,则

9、a为正数;若为非0,则a为负数。如果z非0,有z=~a+1+0x80000;否则z=a。返回z。第页接上#includemain(){inta,get(int);printf("输入一个十六进制数:");scanf("%x",&a);printf("它的补码是:%x",get(a));}get(intvalue)/*求一个数的补码*/{intz;第页接上z=value&0x8000;if(z==0)z=value;/*符号位为0,为正数*/else/*符号位为1,为负数*/{z=~value+1;z=z+0x8

10、0000;}/*恢复符号位*/returnz;}第页运行结果为输入一个十六进制数:-eeff它的补码是:1101第页12-4小结按位与(&)。C语言规定按位与的运算规则为:如果参与运算数据的二进制位都为1,则结果为1;否则只要有0出

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。