首页 第十二章 位运算

第十二章 位运算

举报
开通vip

第十二章 位运算第十二章位运算※位运算符与位运算学习本章基础:2、8、10、16进制数的相互转换※位段及其应用151413121110987654321012.1位运算符与位运算二进制数的位的编号一、位运算符位运算符的运算对象是整数(包括带符号整型、无符号整型、字符型)运算规则是对其中每个二进制位上的0、1进行的;运算结果是整数。【注】长度不等的整数进行“位运算”,执行“就长不就短”的转换规则!转换对象若是无符号整数,则在左边加0;若是带符号整数,则在左边加符号位。【例】shorta...

第十二章    位运算
第十二章位运算※位运算符与位运算学习本章基础:2、8、10、16进制数的相互转换※位段及其应用151413121110987654321012.1位运算符与位运算二进制数的位的编号一、位运算符位运算符的运算对象是整数(包括带符号整型、无符号整型、字符型)运算规则是对其中每个二进制位上的0、1进行的;运算结果是整数。【注】长度不等的整数进行“位运算”,执行“就长不就短”的转换规则!转换对象若是无符号整数,则在左边加0;若是带符号整数,则在左边加符号位。【例】shorta=-1,b=1;unsignedshortc=65535;扩展部分原数据若转换成long型:a=1111111111111111b=0000000000000000c=00000000000000001.位逻辑运算符【注】(1)位运算符的运算规则。(2)位逻辑运算符的优先级如下:●~》算术》关系》&》^》|》&&》||。●~、!、++、--、单目+、-、sizeof()是同级的,结合性自右向左。【例】chara='A';shortb=0x5050,c=0xA0A0;a=01000001a=0000000001000001b=0101000001010000~a=10111110b=0101000001010000c=1010000010100000a&b=0000000001000000b&c=0000000000000000a|b=0101000001010001b|c=1111000011110000a^b=0101000000010001b^c=1111000011110000 名称 对象数与位置 运算符 对象类型 运算规则 结果类型 结合性 位非 单目前缀 ~ 整型字符型 ~1为0~0为1 整型 自右向左 位与 双目中缀 & 参看注(1) 自左向右 按位加 ^ 位或 | a b a&b a|b a^b 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 02.位移位运算符 优先级:算术运算符》位移位运算符》关系运算符 【注】移位运算与对象是否带符号有关,具体规则如下: 无符号数左移(×2n)带符号数左移 ┌─┬─┬...┬─┬─┐┌─┬─┬...┬─┬─┐ 丢弃←│←│←│←│←│←│←0丢弃←│←│←│←│←│←│←0 └─┴─┴...┴─┴─┘└─┴─┴...┴─┴─┘ 无符号数右移(÷2n)带符号数右移 ┌─┬─┬...┬─┬─┐┌─┬─┬...┬─┬─┐ 0→│→│→│→│→│→│→丢弃┌→│→│→│→│→│→│→丢弃 └─┴─┴...┴─┴─┘│└┬┴─┴...┴─┴─┘ └──┘ 【例】unsignedshorta=12;a=0000000000001100黑框:原数 shortb=-1;b=1111111111111111红框:结果 a<<3:000结果是0000000001100000(12×23=96) a>>3000结果是0000000000000001(12÷23=1) b<<3:000结果是1111111111111000(-1×23=-8) b>>3111结果是1111111111111111(-1)0000000000001100000000000000110011111111111111111111111111111111有时正确 名称 对象数与位置 运算符 对象类型 运算规则 结果类型 结合性 位左移 双目中缀 << 整型字符型 X<<YX左移Y位 整型 自左向右 位右移 >> X>>YX右移Y位3.位复合赋值运算符(在3.9节已经见过)优先级:条件运算符》赋值、复合赋值运算符》逗号运算符所有赋值、复合赋值运算符优先级均相同,结合性自右向左的【例】设有shorta=0xAA55;a&=0xBBBBa|=0xBBBBa^=0xBBBB相当于a=a&0xBBBBa=a|0xBBBBa=a^0xBBBBa=1010101001010101a=1010101001010101a=10101010010101010xBBBB=101110111011101110111011101110111011101110111011结果a=1010101000010001a=1011101111111111a=0001000111101110a<<=4a>>=4相当于a=a<<4a=a>>4a=1010101001010101a=1010101001010101结果a=1010010101010000结果a=1111101010100101 名称 对象数与位置 运算符 对象类型 运算规则 结果类型 结合性 位与赋值 双目中缀 &= 左边:变量右边:表达式整型、字符型 X&=Y相当于X=X&(Y) 整型或字符型 自右向左 X|=Y相当于X=X|(Y) 位或赋值 |= 位按位加赋值 ^= X^=Y相当于X=X^(Y) 位左移赋值 <<= X<<=Y相当于X=X<<(Y) 位右移赋值 >>= X>>=Y相当于X=X>>(Y)12.2位运算程序设计例【例1】取出带符号短整型数据的4~7位,组成新的短整型数据。程序:#include"stdio.h"算法:a=xxxxxxxxyyyyxxxxvoidmain()运算数:0000000011110000{shorta,b;&结果00000000yyyy0000scanf("%x",&a);右移4位000000000000yyyyb=a&0x00F0;b>>=4;printf("%x\n",b);}【例2】无符号短整型数据循环右移4位。(例如电子屏幕图案变化)程序:#include"stdio.h"算法:a=xxxxyyyyzzzzmmmmvoidmain()a左移12位b=mmmm000000000000{unsignedshorta,b,c,d;a右移4位c=0000xxxxyyyyzzzzscanf("%x",&a);b|cd=mmmmxxxxyyyyzzzzb=a<<12;c=a>>4;d=b|c;printf("%x\n",d);}12.3位段(节省内存)一、位段的概念2位6位5位3位一个数据中的二进制位分成长度相等或不等的若干段,每段称一个位段。【例】二、位段的定义方法(用结构型)【定义方法】【例】struct结构型名structp_dataabcd{数据类型名成员名:位数;{unsigneda:8;数据类型名成员名:位数;unsignedb:2;…unsignedc:3;数据类型名成员名:位数;intd:3;}结构型变量名;}data1;【注】(1)成员的数据类型只能是unsignedint或int。(2)每个成员占有的所有位必须在一个字节中。structp_data{unsignedx:4;unsignedy:2;xy空zintz:8;}data2;(3)按照第(2)点分配时,允许有空位。(4)成员不能定义为数组。【位段结构型成员引用方法】【例】结构型变量名.成员名。data1.a(只能存放0~255)data1.c(只能存放0~7)data1.d(只能存放-4~3)data2.y(只能存放0~3)【注】成员的引用当成对应类型的普通变量,可以参加运算,以%d、%o、%x、%u 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 输出。三、位段的应用(1)多个小数据可以存放在一个位段变量中,从而节省内存。(2)在控制系统或信息处理中,可能用到某个变量的某几位作为控制信号。本章无习题不考若控制循环的变量i、j=0、1、…、10;可以定义为inti,j;(需要8字节)也可以定义为位段成员,长度为4;(需要1字节)
本文档为【第十二章 位运算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
xxj7584
暂无简介~
格式:ppt
大小:128KB
软件:PowerPoint
页数:0
分类:建造师考试
上传时间:2020-03-21
浏览量:0