C语言具有位逻辑运算和移位运算的独特功能解读ppt课件

上传人:29 文档编号:240772797 上传时间:2024-05-06 格式:PPT 页数:17 大小:185.14KB
返回 下载 相关 举报
C语言具有位逻辑运算和移位运算的独特功能解读ppt课件_第1页
第1页 / 共17页
C语言具有位逻辑运算和移位运算的独特功能解读ppt课件_第2页
第2页 / 共17页
C语言具有位逻辑运算和移位运算的独特功能解读ppt课件_第3页
第3页 / 共17页
点击查看更多>>
资源描述
12.1 位运算C C语言具有位逻辑运算和移位运算的语言具有位逻辑运算和移位运算的独特功能,参与位运算的运算量必须是整独特功能,参与位运算的运算量必须是整数。位逻辑运算包括数。位逻辑运算包括&、|、四种运、四种运算,移位运算有算,移位运算有两种运算。其中两种运算。其中位单目运算符。位单目运算符。12.1 位运算 C语言具有位逻辑运算和移位运算112.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 位运算的复合位运算的复合赋值运算符赋值运算符12.1.1 按位与212.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 x12340 x1234,b b的值为的值为的值为的值为0 x000 x00,a&ba&b运算的结果运算的结果运算的结果运算的结果c c应为:应为:应为:应为:a 0001 0010 0011 0100 a 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 8位清位清位清位清0 0,同时保留或提取低,同时保留或提取低,同时保留或提取低,同时保留或提取低8 8位的值,可位的值,可位的值,可位的值,可用一个高用一个高用一个高用一个高8 8位为位为位为位为0 0,低,低,低,低8 8位为位为位为位为1 1的值的值的值的值0 x00ff0 x00ff和它进行按位与。和它进行按位与。和它进行按位与。和它进行按位与。12.1.1 按位与 参与运算的量312.1.2 按位或 参与运算的量,如果参与运算的量,如果参与运算的量,如果参与运算的量,如果相对应的两位相对应的两位相对应的两位相对应的两位都为都为都为都为0 0,则,则,则,则该该该该位位位位的结果值为的结果值为的结果值为的结果值为0 0,否则为,否则为,否则为,否则为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 x12340 x1234,b b的值为的值为的值为的值为0 x000 x00,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 0010 1111 1111 按位或按位或按位或按位或常用于将某个运算量的常用于将某个运算量的常用于将某个运算量的常用于将某个运算量的某些位置某些位置某些位置某些位置1 1,如本例中将变量,如本例中将变量,如本例中将变量,如本例中将变量的低的低的低的低8 8位置位置位置位置1 1,高,高,高,高8 8位不变,可用一个高位不变,可用一个高位不变,可用一个高位不变,可用一个高8 8位为位为位为位为0 0,低,低,低,低8 8位为位为位为位为1 1的值的值的值的值0 x00ff0 x00ff和它进行按位或。和它进行按位或。和它进行按位或。和它进行按位或。12.1.2 按位或 参与运算的量412.1.3 按位异或 参与运算的量,如果参与运算的量,如果参与运算的量,如果参与运算的量,如果相对应的两位相对应的两位相对应的两位相对应的两位相异,则相异,则相异,则相异,则该位该位该位该位的结果为的结果为的结果为的结果为1 1,否则为,否则为,否则为,否则为0 0,即:,即:,即:,即:0 00=0 00=0 01=1 11=1 10=1 10=1 11=01=0如:如:如:如:a a的值为的值为的值为的值为0 x12340 x1234,b b的值为的值为的值为的值为0 x000 x00,a ab 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 1100 1011 0001 0010 1100 1011 按位异或按位异或按位异或按位异或有有有有“与与与与1 1异或异或异或异或”该位翻转,该位翻转,该位翻转,该位翻转,“与与与与0 0异或异或异或异或”该位不变的该位不变的该位不变的该位不变的规律。如本例中用规律。如本例中用规律。如本例中用规律。如本例中用0 x00ff0 x00ff进行按位异或,使变量进行按位异或,使变量进行按位异或,使变量进行按位异或,使变量a a的低的低的低的低8 8位翻转,位翻转,位翻转,位翻转,高高高高8 8位不变。位不变。位不变。位不变。12.1.3 按位异或 参与运算的512.1.4 按位取反 将参与运算量的相对应位的值取反,即将参与运算量的相对应位的值取反,即将参与运算量的相对应位的值取反,即将参与运算量的相对应位的值取反,即1 1变变变变0 0,0 0变变变变1 1。如:如:如:如:a a的值为的值为的值为的值为0 x12340 x1234,a a运算的结果运算的结果运算的结果运算的结果c c应为:应为:应为:应为:a a 0001 0010 0011 0100 0001 0010 0011 0100 c c 1110 1101 1100 1011 1110 1101 1100 1011 12.1.4 按位取反 将参与运算612.1.5 按位左移按位左移是将一个运算量的各位依次左移若干位,按位左移是将一个运算量的各位依次左移若干位,按位左移是将一个运算量的各位依次左移若干位,按位左移是将一个运算量的各位依次左移若干位,低位补低位补低位补低位补0 0,高位舍弃不要。,高位舍弃不要。,高位舍弃不要。,高位舍弃不要。假设机器字长为假设机器字长为假设机器字长为假设机器字长为8 8位,变量位,变量位,变量位,变量a a的值为的值为的值为的值为1616,将,将,将,将a a左移二位,即左移二位,即左移二位,即左移二位,即a=a2a=a2a=a2:右移前右移前右移前右移前 0000 1111 0000 1111右移后右移后右移后右移后 0000 0011 0000 0011 如果如果如果如果a a是带符号的负数,是带符号的负数,是带符号的负数,是带符号的负数,a=-16a=-16,存放在机器中的补码为,存放在机器中的补码为,存放在机器中的补码为,存放在机器中的补码为1111 00001111 0000,则,则,则,则a=a2a=a2,值为,值为,值为,值为-4-4。右移前右移前右移前右移前 1111 0000 1111 0000 右移后右移后右移后右移后 1111 1100 1111 110012.1.6 按位右移 按位右移是将一个运算量的8表表表表12.3 12.3 位运算符的运算规则位运算符的运算规则位运算符的运算规则位运算符的运算规则把操作数右移指定的位数把操作数右移指定的位数右移右移把操作数左移指定的位数把操作数左移指定的位数左移左移=(按位右移赋值)、(按位右移赋值)、(按位右移赋值)、(按位右移赋值)、=3 a=3 相当于相当于相当于相当于a=a3 a=a3 12.1.7 位运算的复合赋值运算符 共有五种位1012.2 位段的概念 所谓所谓所谓所谓位段位段位段位段,相当于结构体类型,相当于结构体类型,相当于结构体类型,相当于结构体类型中的中的中的中的成员,但是定义位段的长度是以位为单成员,但是定义位段的长度是以位为单成员,但是定义位段的长度是以位为单成员,但是定义位段的长度是以位为单位。它是一种特殊的结构体类型。位。它是一种特殊的结构体类型。位。它是一种特殊的结构体类型。位。它是一种特殊的结构体类型。12.2 位段的概念 所谓位段,相当于结构体11(1 1)位段的定义)位段的定义)位段的定义)位段的定义定义位段的一般形式为:定义位段的一般形式为:定义位段的一般形式为:定义位段的一般形式为:struct struct 结构体类型标识符结构体类型标识符结构体类型标识符结构体类型标识符 unsigned unsigned 位段名位段名位段名位段名1 1:长度:长度:长度:长度1 1;unsigned unsigned 位段名位段名位段名位段名2 2:长度:长度:长度:长度2 2;.unsigned unsigned 位段名位段名位段名位段名n n:长度:长度:长度:长度n n;变量名表;变量名表;变量名表;变量名表;(1)位段的定义定义位段的一般形式为:struct 12(2 2)说明:)说明:)说明:)说明:1.1.在定义中,每个位段(相当于成员)的长度在定义中,每个位段(相当于成员)的长度在定义中,每个位段(相当于成员)的长度在定义中,每个位段(相当于成员)的长度是以位为单位,因此位段的类型为是以位为单位,因此位段的类型为是以位为单位,因此位段的类型为是以位为单位,因此位段的类型为unsignedunsigned。2.2.一个位段必须存储在同一存储单元,不能跨一个位段必须存储在同一存储单元,不能跨一个位段必须存储在同一存储单元,不能跨一个位段必须存储在同一存储单元,不能跨两个单元。即一个位段的长度不能大于一个两个单元。即一个位段的长度不能大于一个两个单元。即一个位段的长度不能大于一个两个单元。即一个位段的长度不能大于一个单元存放。单元存放。单元存放。单元存放。3.3.当某个位段开始存放时,若相应的存储单元当某个位段开始存放时,若相应的存储单元当某个位段开始存放时,若相应的存储单元当某个位段开始存放时,若相应的存储单元空间不够,则剩余空间不用,该位段将在下空间不够,则剩余空间不用,该位段将在下空间不够,则剩余空间不用,该位段将在下空间不够,则剩余空间不用,该位段将在下一个单元存放。一个单元存放。一个单元存放。一个单元存放。(2)说明:在定义中,每个位段(相当于成员)的长度是以位为单13 例如,设某个系统存储单元长度为例如,设某个系统存储单元长度为例如,设某个系统存储单元长度为例如,设某个系统存储单元长度为8 8 8 8(一个字(一个字(一个字(一个字节),且有如下的定义:节),且有如下的定义:节),且有如下的定义:节),且有如下的定义:structstruct unsigned a unsigned a:4 4;unsigned b unsigned b:2 2;unsigned c unsigned c:6 6;xx;abc 例如,设某个系统存储单元长度为8(一个字节),144.可以定义无名位段。可以定义无名位段。例如:例如:例如:例如:struct struct unsigned a unsigned a:4 4;unsigned unsigned :3 3;unsigned bunsigned b:2 2;unsigned cunsigned c:6 6;x x;此位段无名,该此位段无名,该3位闲置不用。位闲置不用。4.可以定义无名位段。例如:此位段无名,该3位闲置不155.可以用长度为可以用长度为0的无名位段,使下一个位的无名位段,使下一个位段从另一个存储单元开始存放。段从另一个存储单元开始存放。struct struct unsigned aa:4;unsigned aa:4;unsigned :3;unsigned :3;unsigned bb:2;unsigned bb:2;unsigned :0;unsigned :0;unsigned cc:6;unsigned cc:6;y y;6.注意,不能定义位段数组。注意,不能定义位段数组。5.可以用长度为0的无名位段,使下一个位段从另一个存储16(3 3)位段的引用:)位段的引用:)位段的引用:)位段的引用:可以用赋值语句赋值可以用赋值语句赋值可以用赋值语句赋值可以用赋值语句赋值 例例例例:x.a=4;y.cc=6;:x.a=4;y.cc=6;可以在表达式中引用可以在表达式中引用可以在表达式中引用可以在表达式中引用,C,C语言将自动将其转换语言将自动将其转换语言将自动将其转换语言将自动将其转换 为为为为intint类型类型类型类型 例例例例:x.a+;y.cc=y.aa+1;:x.a+;y.cc=y.aa+1;可以用整型格式输出可以用整型格式输出可以用整型格式输出可以用整型格式输出 例例例例:printf(“a=%d b=%d c=%d”,x.a,x.b,x.c);:printf(“a=%d b=%d c=%d”,x.a,x.b,x.c);变量名变量名变量名变量名.位段位段位段位段名名名名(3)位段的引用:可以用赋值语句赋值 可以在表达式中17
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!