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

上传人:大米 文档编号:568431270 上传时间:2024-07-24 格式:PPT 页数:17 大小:245.50KB
返回 下载 相关 举报
C语言具有位逻辑运算和移位运算的独特功能_第1页
第1页 / 共17页
C语言具有位逻辑运算和移位运算的独特功能_第2页
第2页 / 共17页
C语言具有位逻辑运算和移位运算的独特功能_第3页
第3页 / 共17页
C语言具有位逻辑运算和移位运算的独特功能_第4页
第4页 / 共17页
C语言具有位逻辑运算和移位运算的独特功能_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《C语言具有位逻辑运算和移位运算的独特功能》由会员分享,可在线阅读,更多相关《C语言具有位逻辑运算和移位运算的独特功能(17页珍藏版)》请在金锄头文库上搜索。

1、12.1 位运算C C语言具有位逻辑运算和移位运算的语言具有位逻辑运算和移位运算的独特功能,参与位运算的运算量必须是整独特功能,参与位运算的运算量必须是整数。位逻辑运算包括数。位逻辑运算包括& &、| |、四种运、四种运算,移位运算有算,移位运算有两种运算。其中两种运算。其中位单目运算符。位单目运算符。12.1.1 12.1.1 按位与按位与12.1.2 12.1.2 按位或按位或12.1.3 12.1.3 按位异或按位异或12.1.4 12.1.4 按位取反按位取反12.1.5 12.1.5 按位左移按位左移12.1.6 12.1.6 按位右移按位右移12.1.7 12.1.7 位运算的复合

2、位运算的复合赋值运算符赋值运算符12.1.1 按位与 参与运算的量,如果参与运算的量,如果参与运算的量,如果参与运算的量,如果相对应的两位相对应的两位相对应的两位相对应的两位都为都为都为都为1 1,则,则,则,则该位该位该位该位的结果值为的结果值为的结果值为的结果值为1 1,否则为,否则为,否则为,否则为0 0,即:,即:,即:,即: 0&0=0 0&1=0 1&0=0 1&1=1 0&0=0 0&1=0 1&0=0 1&1=1如:如:如:如:a a的值为的值为的值为的值为0 0x1234x1234,b b的值为的值为的值为的值为0 0x00x00,a&ba&b运算的结果运算的结果运算的结果运

3、算的结果c c应为:应为:应为:应为: a 0001 0010 0011 0100a 0001 0010 0011 0100 & b 0000 0000 1111 1111 & b 0000 0000 1111 1111 c 0000 0000 0011 0100 c 0000 0000 0011 0100 按位与按位与按位与按位与常用于将某个运算量的常用于将某个运算量的常用于将某个运算量的常用于将某个运算量的某些位清某些位清某些位清某些位清0 0或提取某些位的值或提取某些位的值或提取某些位的值或提取某些位的值,如本例中,将变量的高如本例中,将变量的高如本例中,将变量的高如本例中,将变量的高8

4、 8位清位清位清位清0 0,同时保留或提取低,同时保留或提取低,同时保留或提取低,同时保留或提取低8 8位的值,可位的值,可位的值,可位的值,可用一个高用一个高用一个高用一个高8 8位为位为位为位为0 0,低,低,低,低8 8位为位为位为位为1 1的值的值的值的值0 0x00ffx00ff和它进行按位与。和它进行按位与。和它进行按位与。和它进行按位与。12.1.2 按位或 参与运算的量,如果参与运算的量,如果参与运算的量,如果参与运算的量,如果相对应的两位相对应的两位相对应的两位相对应的两位都为都为都为都为0 0,则,则,则,则该该该该位位位位的结果值为的结果值为的结果值为的结果值为0 0,否

5、则为,否则为,否则为,否则为1 1,即:,即:,即:,即: 0|0=0 0|1=1 1|0=1 1|1=1 0|0=0 0|1=1 1|0=1 1|1=1如:如:如:如:a a的值为的值为的值为的值为0 0x1234x1234,b b的值为的值为的值为的值为0 0x00x00,a|ba|b运算的结果运算的结果运算的结果运算的结果c c应为:应为:应为:应为: a a 0001 0010 0011 0100 0001 0010 0011 0100 |b|b 0000 0000 1111 1111 0000 0000 1111 1111 c c 0001 0010 1111 1111 0001 0

6、010 1111 1111 按位或按位或按位或按位或常用于将某个运算量的常用于将某个运算量的常用于将某个运算量的常用于将某个运算量的某些位置某些位置某些位置某些位置1 1,如本例中将变量,如本例中将变量,如本例中将变量,如本例中将变量的低的低的低的低8 8位置位置位置位置1 1,高,高,高,高8 8位不变,可用一个高位不变,可用一个高位不变,可用一个高位不变,可用一个高8 8位为位为位为位为0 0,低,低,低,低8 8位为位为位为位为1 1的值的值的值的值0 0x00ffx00ff和它进行按位或。和它进行按位或。和它进行按位或。和它进行按位或。12.1.3 按位异或 参与运算的量,如果参与运算

7、的量,如果参与运算的量,如果参与运算的量,如果相对应的两位相对应的两位相对应的两位相对应的两位相异,则相异,则相异,则相异,则该位该位该位该位的结果为的结果为的结果为的结果为1 1,否则为,否则为,否则为,否则为0 0,即:,即:,即:,即: 0 00=0 00=0 01=1 11=1 10=1 10=1 11=01=0如:如:如:如:a a的值为的值为的值为的值为0 0x1234x1234,b b的值为的值为的值为的值为0 0x00x00,a ab b运算的结果运算的结果运算的结果运算的结果c c应为:应为:应为:应为: a a 0001 0010 0011 0100 0001 0010 0

8、011 0100 b b 0000 0000 1111 1111 0000 0000 1111 1111 c c 0001 0010 1100 1011 0001 0010 1100 1011 按位异或按位异或按位异或按位异或有有有有“ “与与与与1 1异或异或异或异或” ”该位翻转,该位翻转,该位翻转,该位翻转,“ “与与与与0 0异或异或异或异或” ”该位不变的该位不变的该位不变的该位不变的规律。如本例中用规律。如本例中用规律。如本例中用规律。如本例中用0 0x00ffx00ff进行按位异或,使变量进行按位异或,使变量进行按位异或,使变量进行按位异或,使变量a a的低的低的低的低8 8位翻

9、转,位翻转,位翻转,位翻转,高高高高8 8位不变。位不变。位不变。位不变。12.1.4 按位取反 将参与运算量的相对应位的值取反,即将参与运算量的相对应位的值取反,即将参与运算量的相对应位的值取反,即将参与运算量的相对应位的值取反,即1 1变变变变0 0,0 0变变变变1 1。如:如:如:如:a a的值为的值为的值为的值为0 0x1234x1234,a a运算的结果运算的结果运算的结果运算的结果c c应为:应为:应为:应为: a a 0001 0010 0011 0100 0001 0010 0011 0100 c c 1110 1101 1100 1011 1110 1101 1100 10

10、11 12.1.5 按位左移按位左移是将一个运算量的各位依次左移若干位,按位左移是将一个运算量的各位依次左移若干位,按位左移是将一个运算量的各位依次左移若干位,按位左移是将一个运算量的各位依次左移若干位,低位补低位补低位补低位补0 0,高位舍弃不要。,高位舍弃不要。,高位舍弃不要。,高位舍弃不要。假设机器字长为假设机器字长为假设机器字长为假设机器字长为8 8位,变量位,变量位,变量位,变量a a的值为的值为的值为的值为1616,将,将,将,将a a左移二位,即左移二位,即左移二位,即左移二位,即a=a2a=a2a=a2: 右移前右移前右移前右移前 0000 1111 0000 1111右移后右

11、移后右移后右移后 0000 0011 0000 0011 如果如果如果如果a a是带符号的负数,是带符号的负数,是带符号的负数,是带符号的负数,a=-16a=-16,存放在机器中的补码为存放在机器中的补码为存放在机器中的补码为存放在机器中的补码为1111 00001111 0000,则,则,则,则a=a2a=a2,值为值为值为值为- 4- 4。 右移前右移前右移前右移前 1111 0000 1111 0000 右移后右移后右移后右移后 1111 1100 1111 1100表表表表12.3 12.3 位运算符的运算规则位运算符的运算规则位运算符的运算规则位运算符的运算规则把操作数右移指定的位数

12、把操作数右移指定的位数右移右移把操作数左移指定的位数把操作数左移指定的位数左移左移=(按位右移赋值)、(按位右移赋值)、(按位右移赋值)、(按位右移赋值)、= =3 a=3 相当于相当于相当于相当于a= a3 a= a3 12.2 位段的概念 所谓所谓所谓所谓位段位段位段位段,相当于结构体类型,相当于结构体类型,相当于结构体类型,相当于结构体类型中的中的中的中的成员,但是定义位段的长度是以位为单成员,但是定义位段的长度是以位为单成员,但是定义位段的长度是以位为单成员,但是定义位段的长度是以位为单位。它是一种特殊的结构体类型。位。它是一种特殊的结构体类型。位。它是一种特殊的结构体类型。位。它是一

13、种特殊的结构体类型。(1 1)位段的定义)位段的定义)位段的定义)位段的定义定义位段的一般形式为:定义位段的一般形式为:定义位段的一般形式为:定义位段的一般形式为: struct struct 结构体类型标识符结构体类型标识符结构体类型标识符结构体类型标识符 unsigned unsigned 位段名位段名位段名位段名1 1:长度:长度:长度:长度1 1; unsigned unsigned 位段名位段名位段名位段名2 2:长度:长度:长度:长度2 2; . unsigned unsigned 位段名位段名位段名位段名n n:长度长度长度长度n n; 变量名表;变量名表;变量名表;变量名表;(

14、2 2)说明:)说明:)说明:)说明:1. 1.在在在在定义中,每个位段(相当于成员)的长度定义中,每个位段(相当于成员)的长度定义中,每个位段(相当于成员)的长度定义中,每个位段(相当于成员)的长度是以位为单位,因此位段的类型为是以位为单位,因此位段的类型为是以位为单位,因此位段的类型为是以位为单位,因此位段的类型为unsignedunsigned。2. 2. 一个位段必须存储在同一存储单元,不能跨一个位段必须存储在同一存储单元,不能跨一个位段必须存储在同一存储单元,不能跨一个位段必须存储在同一存储单元,不能跨两个单元。即一个位段的长度不能大于一个两个单元。即一个位段的长度不能大于一个两个单

15、元。即一个位段的长度不能大于一个两个单元。即一个位段的长度不能大于一个单元存放。单元存放。单元存放。单元存放。3. 3. 当某个位段开始存放时,若相应的存储单元当某个位段开始存放时,若相应的存储单元当某个位段开始存放时,若相应的存储单元当某个位段开始存放时,若相应的存储单元空间不够,则剩余空间不用,该位段将在下空间不够,则剩余空间不用,该位段将在下空间不够,则剩余空间不用,该位段将在下空间不够,则剩余空间不用,该位段将在下一个单元存放。一个单元存放。一个单元存放。一个单元存放。 例如,设某个系统存储单元长度为例如,设某个系统存储单元长度为例如,设某个系统存储单元长度为例如,设某个系统存储单元长

16、度为8 8 8 8(一个字(一个字(一个字(一个字节),且有如下的定义:节),且有如下的定义:节),且有如下的定义:节),且有如下的定义:structstruct unsigned a unsigned a:4 4; unsigned b unsigned b:2 2; unsigned c unsigned c:6 6;xx;abc4. 可以定义无名位段。可以定义无名位段。例如:例如:例如:例如: struct struct unsigned a unsigned a:4 4;unsigned unsigned :3 3;unsigned bunsigned b:2 2;unsigned c

17、unsigned c:6 6; x x; 此此位段无名,该位段无名,该3位闲置不用。位闲置不用。5. 可以用长度为可以用长度为0的无名位段,使下一个位的无名位段,使下一个位段从另一个存储单元开始存放。段从另一个存储单元开始存放。 structstruct unsigned unsigned aaaa: 4;: 4;unsigned : 3;unsigned : 3;unsigned bb: 2;unsigned bb: 2;unsigned : 0;unsigned : 0;unsigned cc: 6;unsigned cc: 6; y y; 6. 注意,不能定义位段数组。注意,不能定义位段

18、数组。(3 3)位段的引用:)位段的引用:)位段的引用:)位段的引用: 可以用赋值语句赋值可以用赋值语句赋值可以用赋值语句赋值可以用赋值语句赋值 例例例例: : x.a=4; y.cc=6;x.a=4; y.cc=6; 可以在表达式中引用可以在表达式中引用可以在表达式中引用可以在表达式中引用, , C C语言将自动将其转换语言将自动将其转换语言将自动将其转换语言将自动将其转换 为为为为intint类型类型类型类型 例例例例: : x.a+; y.cc=y.x.a+; y.cc=y.aaaa+1;+1; 可以用整型格式输出可以用整型格式输出可以用整型格式输出可以用整型格式输出 例例例例: : printfprintf(“a=%d b=%d c=%d”, x.a, x.b, x.c);(“a=%d b=%d c=%d”, x.a, x.b, x.c);变量名变量名变量名变量名. . 位段位段位段位段名名名名

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号