C语言及程序设计(第2版)课件第11章 位运算_第1页
C语言及程序设计(第2版)课件第11章 位运算_第2页
C语言及程序设计(第2版)课件第11章 位运算_第3页
C语言及程序设计(第2版)课件第11章 位运算_第4页
C语言及程序设计(第2版)课件第11章 位运算_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1第11章位运算位运算简介位赋值运算符位段应用举例23.位运算有:

“按位与”运算“按位或”运算“异或”运算“取反”运算左移运算右移运算11.1位运算简介

1.位运算和指针一样,都是C语言的重要特色。

2.位运算的概念:

所谓位运算,是指进行二进制位的运算。例如:将一个存储单元中的各二进制位左移或右移1位,两个数按位相加等。位运算符含义举例&按位与a&b|按位或a|b∧按位异或a∧b~按位取反~a<<左移a<<1>>右移b>>23

位赋值运算符是位运算符与赋值运算符的结合。位赋值运算符含义举例等同于&=位与赋值a&=ba=a&b|=位或赋值a|=ba=a|b∧=位异或赋值a∧=ba=a∧b<<=左移赋值a<<=ba=a<<b>>=右移赋值a>>=ba=a>>b11.2位赋值运算符4

C语言允许在一个结构体中以位为单位来指定其成员所占的内存长度,这种以位为单位的成员称为“位段”或“位域”。“位段”或“位域”是一种特殊的结构体成员。

11.3位段定义的一般格式如下:struct结构体名{

类型成员1:长度;

类型成员2:长度;…

类型成员n:长度;};其中,冒号前的成员为位段,冒号后的长度表示存储位段需要占用字节的位数。5例如:structdevice{unsigneda:1;unsignedb:2;unsignedc:4;shortx;floaty;}data;11.3位段结构体变量data包含5个成员,它们分别是a、b、c、x、y。其中,a、b、c为位段,分别占用1位、2位、4位,即a、b、c共占用7位。这样,用一个字节就可以存储这3个位段。x、y为基本类型的成员,分别需要2个、4个字节存储。因此,结构体变量data需要占用7个字节的内存单元。上图给出了结构体变量data的每个成员在内存中的分配情况。

14211个字节2个字节4个字节xycba1632610.4应用举例

程序:main(){intnum,bit,i;unsignedtest=0x8000;printf("inputmum:");scanf("%d",&num);printf("binaryof%xis:",num);for(i=1;i<=16;i++){bit=((num&test)==0)?0:1;printf("%d",bit);test>>=1;}}

运行结果:inputnum:12345↙binaryof3039is:0011000000111001例1输出一个整数的二进制形式。710.4应用举例

题目分析:①利用某位与1进行异或可将该位翻转的特性,设置一个掩码mask,mask中的数据最好不能从键盘上直接输入,以避免mask碰巧与源码(输入的字符串)相同、进行按位“异或”运算、结果为0、无法进行加密和解密的情况(如"123abc"∧"123abc"=0)。为此,查ASCII字符编码一览表(附录A),选取mask="\x14\x15"。②上面的\x14和\x15的十进制分别是20和21,分别代表¶和§,它们无法从键盘上直接输入。其二进制分别为:0000000000010100和0000000000010101。③编写strencrypt函数。该函数有两个形参:一个是源码——要加密/解密的字符串,一个是掩码——加密使用的mask。使用循环结构将需要加密/解密的字符串不断与掩码mask的对应二进制位进行多轮次的按位“异或”运算,直到加密/解密的字符串结束,完成字符串的加密/解密。

例2编写一函数,实现字符串(例如用户使用的密码)的加密和解密。810.4应用举例

程序:#include"stdio.h"#defineMASK"\x14\x15" /*定义一个加密/解密的mask*/char*strencrypt(charstr[],charmask[])/*对字符串进行加密/解密*/{inti,j;for(i=0;str[i]!=0;) /*循环到加密/解密字符串结束*/for(j=0;str[i]!=0&&mask[j];j++,i++)/*循环到加密/解密字符串或mask字符串结束*/{str[i]=str[i]^mask[j]; /*按位“异或”*/}return(str);}main(){charstr[80];printf("Inputastring:");scanf("%s",str); /*输入一个要加密/解密的字符串*/strencrypt(str,MASK); /*加密*/printf("Encryptstringis:%s\n",str); /*输出加密后的字符串*/strencrypt(str,MASK); /*解密*/printf("ReEncryptstringis:%s\n",str); /*输出解密后的字符串*/}运行结果:Inputastring:ac#@^

温馨提示

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

评论

0/150

提交评论