掌握位运算的类型及其操作_第1页
掌握位运算的类型及其操作_第2页
掌握位运算的类型及其操作_第3页
掌握位运算的类型及其操作_第4页
掌握位运算的类型及其操作_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

掌握位运算的类型及其操作第1页,课件共15页,创作于2023年2月10.1位运算符和位运算C语言提供的位运算操作符,具有直接操作二进制位的能力,位运算是指二进制位的运算,操作数以二进制补码形式按位参与运算。运算符中除了取反运算~外,其余都是二元运算符,且操作数只能是整型或字符型数据,不能是实型数据第2页,课件共15页,创作于2023年2月10.1.1与运算

&按位与运算符"&"的功能是参与运算的两数各对应的二进制位相与。只有对应的两个二进制位都为1时,结果位才为1,否则为0。例如:10&6可写算式如下:

00001010(10的二进制补码)&00000110(6的二进制补码)00000010(2的二进制补码)按位与运算通常用来对某些位清0第3页,课件共15页,创作于2023年2月10.1.2或运算

|按位或运算符“|”的功能是参与运算的两数各对应的二进制位相或。只要对应的二进制位中有一个为1,结果位就为1。例如:10|6可写算式如下:

00001010|0000011000001110(十进制为14)按位或运算通常用来对某些位置1第4页,课件共15页,创作于2023年2月10.1.3异或运算

^按位异或运算符“^”功能是参与运算的两数各对应的二进制位相异或,当对应的二进制位相异时,结果为1。例如:10^6可写成算式如下:

00001010^0000011000001100(十进制为12)第5页,课件共15页,创作于2023年2月10.1.4求反运算~求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进制位按位求反。例如:~10的运算为:~(00001010)

结果为:11110101应当注意的是~的优先级较高,对~a&b,是先进行~a运算,再进行&运算。第6页,课件共15页,创作于2023年2月10.1.5左移运算<<左移运算符“<<”功能把“<<”左边的运算数的二进制位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。例如:a<<4指把a的各二进制位向左移动4位,若a=00000011(十进制3),左移4位后为00110000(十进制48)。当不发生溢出时,一个数据每左移1位相当于乘以2,左移2位相当于乘以4第7页,课件共15页,创作于2023年2月10.1.6右移运算>>右移运算符“>>”功能是把“>>”左边的运算数的各二进制位全部右移若干位,“>>”右边的数指定移动的位数。对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0;当为负数时,符号位为1,最高位是补0还是补1取决于编译系统的规定,TurboC和很多系统规定补1。例如:a=10,b=-10;a>>210的补码为00001010右移2位后为00000010b>>2(-10的补码为11110110右移2位后为11111101当不发生溢出时,一个数据每右移1位相当于除以2,右移2位相当于除以4第8页,课件共15页,创作于2023年2月说明:(1)复合赋值运算符:除按位取反运算外,其余5个位运算符均可与赋值运算符一起构成复合赋值运算符,例如&=、|=、^=、<<=、>>=。如a&=b相当于a=a&b。(2)不同长度数据间的位运算:当不同长度的数据进行位运算时(如a&b,a为long型,b为int型),系统会将二者按右端对齐,如果b为正数,则左侧16位补0;如果b为负数,左侧16位补1;如果b为无符号整数,则左侧补0。(3)位运算符“&、|、~”不同于逻辑运算符“&&、||、!”,位运算按二进制位相与,结果为数值;逻辑运算符操作数整体运算,结果为逻辑值真或假;第9页,课件共15页,创作于2023年2月10.2位域“位域”是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作,这样就可以把几个不同的对象用一个字节的二进制位来表示。利用位域能够用较少的位数存储数据。

第10页,课件共15页,创作于2023年2月位域是一种结构体,允许以位为单位来指定成员所占用的内存长度,其定义和结构体定义相仿,形式为:

struct位域结构名

{

位域列表;};10.2.1位域结构体及变量的定义其中位域表示为:类型说明符位域名:长度,位域的类型只能是unsigned或int类型,长度不能超过一个存储单元的长度注:无域名的位域不可用;不指明长度则表示长度为一个存储单元;长度为0的域称为空域,表示下面的位域从下一单元开始存放。一、位域结构体的定义第11页,课件共15页,创作于2023年2月二、位域变量的定义及说明位域变量的说明与结构体变量说明的方式相同。可采用先定义后说明,同时定义说明或者直接说明三种方式。例如:

structdata { inta:8; intb:2; intc:6; inti; }x;说明x为data类型的变量,共占四个字节。其中位域a占8位,位域b占2位,位域c占6位,位域i占两个字节。abci82616第12页,课件共15页,创作于2023年2月一个位域必须存储在同一个存储单元中,不能跨两个存储单元。如果一个存储单元所剩空间不够存放一个位域时,系统自动从下一单元存放该位域。也可以使用空域使某位域从下一单元开始存放。例如:structdata{ unsigneda:4; unsigned:0; unsignedb:5; unsignedc:4; inti;}x;第13页,课件共15页,创作于2023年2月10.2.2、位域的引用位域的引用和结构成员的引用相同,用位域变量和成员访问运算符来引用位域成员,其一般形式为:位域变量名.位域如:x.a=10;x.b=2也可以用指针变量指向一个成员为位域的结构体变量,然后通过该指针变量来引用位域。如:structdatax,*p;p=&x;/*使p指向x*/p->a=10;p->c=2;位域的输出允许用%d、%x、%u和%o等格式。注:赋值时要注意位域的最大范围在数值表达式中引用位域时,系统自动将位域转换为整型数据第14页,课件共15页,创作于2023年2月例:定义位域结构体,并输出位域值。

#include”stdio.h”voidmain(){ structdata/*定义位域结构体data*/ {unsigneda:1; unsignedb:3; unsignedc:4; }bit,*pbit;/*说明位域变量bit和指针变量pbit*/ bit.a=1; bit.b=7; bit.c=15; printf("

温馨提示

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

评论

0/150

提交评论