10第10章 位运算.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10第10章 位运算

10.4 位段及应用 位段结构类型及位段结构变量的定义 位段结构的存储 位段结构的使用 位段结构类型及位段结构变量的定义格式为: struct 结构标识符 { 数据类型 位段名1:位数; 数据类型 位段名2:位数; …… 数据类型 位段名n:位数; }[位段结构变量表]; 其中,各位段的数据类型必须是int、signed或unsigned;位数为1的位段只能用unsigned;每个位段名后紧跟一个冒号,冒号后面是该位段的位数。 10.4 位段及应用 对位段结构的定义应注意以下几点: (1)各个位段必须依次单独定义。 (2)每个位段的长度可以超过一个字节,但不能超过计算机的字长,所有位段的总长度则可以超过一个计算机字长,超过的部分会占用下一个存储单元。 10.4 位段及应用 对位段结构的定义应注意以下几点: 如果需要指定某个位段从下一个字节开始存储,可以采用下面的定义形式: struct { unsigned a:2; unsigned :0; unsigned b:3; } data; 这里,data的第二个成员为无名位段,长度为0,表示本位段后面定义的位段应从下一个字节开始存放。 10.4 位段及应用 对位段结构的定义应注意以下几点: 位段不能定义成数组的形式。 位段的输出可用整型格式符,如%d、%o、%u、%x等进行输出。 位段可以在数值表达式中引用,它会被系统自动地转换成整型数据。如: data.a*2%data.b 是合法的。 位段定义的长度不能大于它所定义的类型所占存储单元的长度 10.4 位段及应用 1、 十进制整数的二进制形式输出(位运算) 10.5 算法解析 利用位运算输出整数二进制的原理 1、 十进制整数的二进制形式输出(位运算)的算法流程 10.5 算法解析 1、 十进制整数的二进制形式输出(位运算)的源程序 10.5 算法解析 #include stdio.h void main() {int dec_num,bin_num,i,one_num=0; unsigned t_num=0 /*保证4字节,最高位为1,在测试中1不断被右移,以测试数据的各个二进制位的值为1还是为0 */ printf(请输入一个任意整数:); scanf(%d,dec_num); printf(十进制:%d\n二进制:,dec_num); for(i=1;i=32;i++) { bin_num=(dec_numt_num)?1:0; /*从最高位到最低位,依次测试各个位是否为1*/ if(bin_num) one_num++; /*记录1的个数,目的是去除二进制输出时第一个1前面的若干个0 */ if(one_num) printf(%d,bin_num); t_num=1; /*用于测试的数值,1所在的位置右移1位,为测试下一位置做准备*/ } printf(\n); } 2、利用位运算实现文件的加密及解密 10.5 算法解析 问题描述 将某一已知文件的内容以字符形式读出,利用抑或操作特性实现明文与密钥(用户从键盘输入)加密及解密。如:设原文为China,密钥为2,按二进制进行异或操作即可得到密文Ajklc。 问题分析 该问题的提出是基于抑或运算的特性而进行的信息置乱与还原。原理为:a^b^a≡a^a^b≡b。其中b为明文,a为密钥。为简化问题,本程序计划采用固定地址、名称的文本文件作为明文,密文及解密文件也用相同办法处理。 2、利用位运算实现文件的加密及解密 10.5 算法解析 算法设计 1.以二进制只读的方式打开明文文件,以写的方式创建密文文件。 2.通过fgetc()读取明文文件的每一个字符,将该字符与密钥(数字)进行抑或,得密文并写入文件。 3.解密是加密的逆过程,做法同1、2步。 程序源代码(略) 位运算是C语言的一种特殊运算功能,它是以二进制位为单位进行运算的。位运算符只有逻辑运算和移位运算两类。位运算符可以与赋值符一起组成复合赋值符。如=,|=,^=,=,=等。 1.利用位运算可以完成汇编语言的某些功能,如置位,位清零,移位等。还可进行数据的压缩存储和并行运算。 2.位段在本质上也是结构类型,不过它的成员按二进制位分配内存。其定义、说明及使用的方式都与结构相同。 3.位段提供了一种手段,使得可在高级语言中实现数据的压缩,节省了存储空间,同时也提高了程序的效率。 小结 * * * * * * * *

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档