首页 C语言具有位逻辑运算和移位运算的独特功能

C语言具有位逻辑运算和移位运算的独特功能

举报
开通vip

C语言具有位逻辑运算和移位运算的独特功能null12.1 位运算12.1 位运算C语言具有位逻辑运算和移位运算的独特功能,参与位运算的运算量必须是整数。位逻辑运算包括&、|、∧、~四种运算,移位运算有>两种运算。其中~位单目运算符。null12.1.1 按位与 12.1.2 按位或 12.1.3 按位异或 12.1.4 按位取反 12.1.5 按位左移 12.1.6 按位右移 12.1.7 位运算的复合赋值运算符12.1.1 按位与12.1.1 按位与 参与运算的量,如果相对应的两位都为1,则...

C语言具有位逻辑运算和移位运算的独特功能
null12.1 位运算12.1 位运算C语言具有位逻辑运算和移位运算的独特功能,参与位运算的运算量必须是整数。位逻辑运算包括&、|、∧、~四种运算,移位运算有<<、>>两种运算。其中~位单目运算符。null12.1.1 按位与 12.1.2 按位或 12.1.3 按位异或 12.1.4 按位取反 12.1.5 按位左移 12.1.6 按位右移 12.1.7 位运算的复合赋值运算符12.1.1 按位与12.1.1 按位与 参与运算的量,如果相对应的两位都为1,则该位的结果值为1,否则为0,即: 0&0==0 0&1==0 1&0==0 1&1==1 如:a的值为0x1234,b的值为0x00,a&b运算的结果c应为: a 0001 0010 0011 0100 & b 0000 0000 1111 1111 c 0000 0000 0011 0100 按位与常用于将某个运算量的某些位清0或提取某些位的值,如本例中,将变量的高8位清0,同时保留或提取低8位的值,可用一个高8位为0,低8位为1的值0x00ff和它进行按位与。12.1.2 按位或12.1.2 按位或 参与运算的量,如果相对应的两位都为0,则该位的结果值为0,否则为1,即: 0|0==0 0|1==1 1|0==1 1|1==1 如:a的值为0x1234,b的值为0x00,a|b运算的结果c应为: a 0001 0010 0011 0100 |b 0000 0000 1111 1111 c 0001 0010 1111 1111 按位或常用于将某个运算量的某些位置1,如本例中将变量的低8位置1,高8位不变,可用一个高8位为0,低8位为1的值0x00ff和它进行按位或。12.1.3 按位异或12.1.3 按位异或 参与运算的量,如果相对应的两位相异,则该位的结果为1,否则为0,即: 0∧0==0 0∧1==1 1∧0==1 1∧1==0 如:a的值为0x1234,b的值为0x00,a∧b运算的结果c应为: a 0001 0010 0011 0100 ∧b 0000 0000 1111 1111 c 0001 0010 1100 1011 按位异或有“与1异或”该位翻转,“与0异或”该位不变的规律。如本例中用0x00ff进行按位异或,使变量a的低8位翻转,高8位不变。12.1.4 按位取反12.1.4 按位取反 将参与运算量的相对应位的值取反,即1变0,0变1。 如:a的值为0x1234,~a运算的结果c应为: ~a 0001 0010 0011 0100 c 1110 1101 1100 1011 12.1.5 按位左移12.1.5 按位左移按位左移是将一个运算量的各位依次左移若干位,低位补0,高位舍弃不要。 假设机器字长为8位,变量a的值为16,将a左移二位,即a=a<<2: 左移前 0001 0000 左移后 0100 0000 由此看出,左移一位相当于该数乘2,左移二位相当于乘4,即22,但这要以该数左移之后不“溢出”为前提。所谓“溢出”指该数已超过机器字长所能容纳的范围,如该例若继续左移二位,该数为16× 24=256,超出了字长8位的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示范围(257),即产生了溢出。 12.1.6 按位右移12.1.6 按位右移按位右移是将一个运算量的各位依次右移若干位,低位被移出,高位对无符号数补0,对有符号数要按最高符号位自身填补。 右移一位相当于该数除以2,但有可能带来误差。假设机器字长为8位,变量a值为15,将a右移二位,即a=a>>2: 右移前 0000 1111 右移后 0000 0011 如果a是带符号的负数,a=-16,存放在机器中的补码为1111 0000,则a=a>>2,值为- 4。 右移前 1111 0000 右移后 1111 1100null表12.3 位运算符的运算规则12.1.7 位运算的复合赋值运算符12.1.7 位运算的复合赋值运算符共有五种位运算的复合赋值运算符:&=(位与赋值)、|=(位或赋值) 、∧= (位异或赋值) 、>>=(按位右移赋值)、<<= (按位左移赋值)。 例如:a ∧=b 相当于a= a ∧b a>>=3 相当于a= a>>3 12.2 位段的概念 12.2 位段的概念 所谓位段,相当于结构体类型中的 成员,但是定义位段的长度是以位为单 位。它是一种特殊的结构体类型。null(1)位段的定义定义位段的一般形式为: struct 结构体类型标识符 { unsigned 位段名1:长度1; unsigned 位段名2:长度2; …… …. unsigned 位段名n:长度n; }变量名表;null(2)说明:在定义中,每个位段(相当于成员)的长度是以位为单位,因此位段的类型为unsigned。2. 一个位段必须存储在同一存储单元,不能跨两个单元。即一个位段的长度不能大于一个单元存放。3. 当某个位段开始存放时,若相应的存储单元空间不够,则剩余空间不用,该位段将在下一个单元存放。null 例如,设某个系统存储单元长度为8(一个字节),且有如下的定义: struct { unsigned a:4; unsigned b:2; unsigned c:6; }x;null4. 可以定义无名位段。例如: struct { unsigned a:4; unsigned :3; unsigned b:2; unsigned c:6; }x; 此位段无名,该3位闲置不用。null5. 可以用长度为0的无名位段,使下一个位段从另一个存储单元开始存放。 struct { unsigned aa: 4; unsigned : 3; unsigned bb: 2; unsigned : 0; unsigned cc: 6; }y; 6. 注意,不能定义位段数组。null(3)位段的引用: 可以用赋值语句赋值 例: x.a=4; y.cc=6; 可以在表达式中引用, C语言将自动将其转换 为int类型 例: x.a++; y.cc=y.aa+1; 可以用整型格式输出 例: printf(“a=%d b=%d c=%d”, x.a, x.b, x.c);变量名. 位段名
本文档为【C语言具有位逻辑运算和移位运算的独特功能】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_370318
暂无简介~
格式:ppt
大小:247KB
软件:PowerPoint
页数:0
分类:
上传时间:2011-05-09
浏览量:36