第11章位运算案例.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 位运算 11.1 位运算符 11.2 位运算符的运算功能 11.3 位段 习题11 11.1 位运算符 计算机中的位运算是针对二进制代码进行的。每一个二进制位的取值只有0或1。位运算符的操作对象是一个二进制位的集合,如一个字节(8 bit)。 位运算符共有6种,即 ~、、、、| 和 ^,分别表示按位取反、左移位、右移位、按位与、按位或和按位异或,见表11-1所示。 移位运算符是将一个数的二进制位向左或向右移若干位。每向左移一位,就相当于对操作对象乘以2;每向右移一位,就相当于对操作对象除以2。向左移位时,右边补0,高位溢出舍弃不用;向右移位时,对无符号数左边补0。在C语言中,对有符号数,若该数为正,则左边补0;若该数为负,则左边补1。 11.1.1 按位取反 求反运算符“~”为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。例如,~9的运算为 ~(0000 0000 0000 1001)=1111 1111 1111 0110 即将其操作对象中的所有二进制位全部改变状态,即“逢0变1,逢1变0”。 又如,八进制数0217(即二进制数1000 1111),其按位取反后为八进制数0160(即二进制数0111 0000),即 ~ 1000 1111 0111 0000 11.1.2 移位 移位运算符有左移运算符和右移运算符两种。 1. 左移运算符 左移运算符“”是双目运算符。其功能是将一个数的各二进制位全部左移若干位(左丢弃,右补0),由“”右边的数指定移动的位数。 左移运算符的一般书写格式为 表达式1 表达式2 其中,“表达式1”是被左移的对象,“表达式2”给出左移的位数。例如: a=1; a=a2; 将a的二进制数左移2位,右补0。此时a的值为4。 若左移时舍弃的高位不包含1,则数每左移一位,相当该数乘以2。 2. 右移运算符 右移运算符是将其操作对象向右移动指定的位数,每右移1位相当于除以2,移n位相当于除以2的n次方。在进行右移时,右边移出的二进制位被舍弃。 右移运算符的一般书写格式为 表达式1 表达式2 其中,“表达式1”是被右移的对象,“表达式2”给出右移的位数。例如: a=15; a=a2; 示把0000 1111右移为0000 0011(十进制3)。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。Turbo C和很多系统规定为补1。 11.1.3 按位与 按位与运算符“”是双目运算符。其功能是参与运算的两数各对应的二进位相与。参与运算的数以补码的方式出现。 按位与的一般书写格式为 表达式1 表达式2 其中,“表达式1”和“表达式2”均为整型表达式。 按位与的运算原则为:当两个操作对象的相应二进制位都为1时,则该位的结果为1,否则为0,即“两1为1,其余为0”。 但要注意,按位与运算时,两个表达式之间用“”符号,而逻辑与时,两个表达式之间用“”符号,所以,一定要注意不要弄错。 例如,115可写成算式如下: 0000 1011 0000 0101 0000 0001 所以,115的值为1。 按位与运算通常用来对某些位清0或保留某些位。例如把a的高八位清0,低八位保留,可作a255运算(255的二进制数为0000 0000 1111 1111)。 【例11-1】右移运算符和按位与运算符举例。 #include stdio.h main( ) { unsigned a,b; printf(input a number: ); scanf(%d,a); b=a5; /* a右移5位,将右移后的值赋给b */ b=b15; /* 将b和15按位与的值赋给b */ printf(a=%d\tb=%d\n,a,b); } 运行结果: input a number: 255 a=255 b=7 【例11-2】利用按位与来获取指定位的值。 假设x是一般的unsigned类型的整型数(2个字节),现在需要获取其低字节的值,这时,只需将x与0377相与即可。例如: y = x 0377 式中,x的二进制表示为0101 0001 0111 001

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档