C语言程序设计教程 第10章

上传人:zw****58 文档编号:51718223 上传时间:2018-08-16 格式:PPT 页数:18 大小:146.50KB
返回 下载 相关 举报
C语言程序设计教程 第10章_第1页
第1页 / 共18页
C语言程序设计教程 第10章_第2页
第2页 / 共18页
C语言程序设计教程 第10章_第3页
第3页 / 共18页
C语言程序设计教程 第10章_第4页
第4页 / 共18页
C语言程序设计教程 第10章_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《C语言程序设计教程 第10章》由会员分享,可在线阅读,更多相关《C语言程序设计教程 第10章(18页珍藏版)》请在金锄头文库上搜索。

1、第10章 位 运 算 位运算是指对二进制位进行的运算。每个二进制位中 只能存放0或1。因此,位运算就是对二进制数的运算。通 常,将一个数据用二进制数表示后,最右边的二进制位称 为最低位(第0位),最左边的二进制位为最高位。 图10.1 微机中整数的二进制位表示10.1 二进制位运算10.2 位 段10.3 程序举例10.1 二进制位运算在C语言中共提供了6种位运算符,如表10.1所示。表10.1位运算符意 义& | 按位与 按位或 按位异或 按位取反 左移 右移(1)在这6种位运算符中,其中按位取反是单目运算符, 只有一个运算对象,其他均为双目运算符,有两个运算对象 。 (2)位运算的运算对象

2、只能是整型(包括int,short,long 和unsigned)或字符型数据,而不能是实型数据。 (3)各位运算符的优先级比较分散,与其他运算符一起, 其优先级从高到低如下:逻辑非(!)按位取反()算术运算符左移运算符()关系运算符按位与运算符(&),按位异 或运算符(),按位或运算符(|)&与| 赋值运算符1“按位与”运算符(&)“按位与”的运算符为“&”。其运算规则是:若两个运 算对象的对应二进制位均是1,则结果的对应位是1,否则为0 。 利用“按位与”运算可以实现以下功能: (1)取出数据中指定的位 (2)将数据中的指定位清零2“按位或”运算符(|)“按位或”的运算符为“|”。其运算

3、规则是:若两个运算对象的对应二进制位 中有一个是1,则结果的对应位是1,否则 为0。 例10.2 下列C程序的功能是将整型数组中所有元素转换 为不小于它的最小奇数,并显示输出。#include “stdio.h“ main() int k,a1023,14,24,31,46,55,33,68,27,40;for (k0;k10;k)printf(“%5d“,ak);printf(“n“);for (k0;k10;k)akak|0x01;for (k0;k10;k)printf(“%5d“,ak);printf(“n“); 3“按位异或”运算符()“按位异或”的运算符为“” 。其运算规则是:若两

4、 个运算对象的对应二进制位不相等,则结果的对应位是1, 否则为0。 “按位异或”运算具有以下几个性质:(1)使数据中的某些位取反,即将0变为1,1变为0。(2)同一个数据进行异或运算后,其结果为0。利用异或 运算的这个性质,可以将变量清零。 (3)可以实现交换两个变量的值:4“按位取反”运算符()“按位取反”的运算符为“”。其运算规则是:将 运算对象中的各二进制位值取反,即将0变为1,1变为0 。5“左移”运算符()“右移”运算符为“”。其运算规则是:将运算对象中的 每个二进制位向右移动若干位,从右边移出去的低位部分被 丢弃。但左边空出的高位部分是补0还是补1,要视下列具体 情况而定:若右移对

5、象为无符号整型数,则右移后左边空出的高位 部分补0。若右移对象为一般整型数或字符型数据,当该数据的最 高位为0(对于一般整型来说即为正数),则右移后左边空 出的高位部分补0。当该数据的最高位为1(对于一般整型来 说即为正数),则与使用的计算机系统有关,有的计算机系 统将右移后左边空出的高位部分补1,称为“算术右移”; 有的计算机系统将右移后左边空出的高位部分补0,称为“ 逻辑右移”。 10.2 位 段在C语言中,定义位段结构类型的一般形式为struct 位段结构类型名 成员表 ;在定义位段与使用位段时,要注意以下几个问题:(1)位段成员的类型必须是unsigned型。(2)在位段结构类型中,可

6、以定义无名位段,这种无 名位段具有位段之间的分隔作用。 (3)每个位段(成员)所占的二进制位数一般不能超 过一个字长(即一个存储单元)。 (4)在位段结构类型定义中,可以包含非位段成员。 (5)位段可以在一般的表达式中被引用,并被自动转 换为相应的整数。 10.3 程序举例例10.3 编写一个C程序,其功能是:从键盘输入一个无符号整数m以及位移位数n,当n0时,将m循环右移n位;当n0时,将m循环左移|n|位。将一个无符号整数m循环移n位的方法如下:首先用sizeof函数确定一个无符号整数所占的二进制位数 k。如果是循环右移,则先将m右移n位(即将原数的高kn 位移到低位),再将m左移kn位(

7、即将原数的低n位移到高 位),然后将它们作按位或运算(即将它们合并)。如果是循环左移,则先将m左移n位(即将原数的低kn 位移到高位),再将m右移kn位(即将原数的高n位移到低 位),然后将它们作按位或运算(即将它们合并)。其C程序如下:#include “stdio.h“main() unsigned m;int n;printf(“input m:“);scanf(“%x“,&m);printf(“input n:“);scanf(“%d“,&n);if (n0)printf(“moveright%xn“,moveright(m,n);elseprintf(“moveleft%xn“,moveleft(m,n); moveright(unsigned m,int n) unsigned z;int k;k8*sizeof(unsigned);z(mn)|(m(kn);return(z);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号