电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C第2版(第11章_位运算)VIP免费

C第2版(第11章_位运算)_第1页
1/20
C第2版(第11章_位运算)_第2页
2/20
C第2版(第11章_位运算)_第3页
3/20
第11章位运算本章主要内容1.按位取反运算2.按位左移运算3.按位左移运算4.按位与运算5.按位或运算6.按位异或运算7.复合位运算第11章位运算第11章位运算11.1位运算符C既具有高级语言的特点,又具有低级语言的功能,位运算能力就是其特色之一。所谓位运算就是指进行二进制位的运算。C提供的位运算符有:运算符含义&按位与¦按位或按位异或~取反<<左移>>右移说明:位运算符中除“~”外,其余均为二目运算符,即要求两侧各有一个运算量。运算量只能是整型或字符型的数据,不能为实型数据。11.2“按位与”运算符&参加运算的两个运算量之对应位都为1,则该位的结果为1,否则为0。即:0&0=00&1=01&0=01&1=1例:3&5=13的补码:000000115的补码:00000101&00000001&运算符的用途:清零如果想将一个单元清零(全部二进位为),则只要找一个数的补码的对应位0与被清零数的对应位1刚好对应,然后使两者进行&运算。如:00101011&1001010000000000取一个数中的某些指定位如:a:0010110010101100b:0000000011111111(377)8&0000000010101100得到a的低8位保留一个数的某一位如:01010100(84)10&00111011(59)1000010000(16)1011.3“按位或”运算符¦参加运算的两个运算量之对应位只要有一个为1,则该位的结果为1。即:0¦0=00¦1=11¦0=11¦1=1如:00110000(060)8¦00001111(017)800111111(077)8即一个数与017进行按位或运算,就可将该数的低4位全置为1;与0377进行按位或运算,就可将该数的低8位全置为1。11.4“异或”运算符参加运算的两个运算量的对应位相同,则该位的结果为0。否则为1。即:00=001=110=111=0如:00111001(57)10、(071)800101010(42)10、(052)800010011(19)10、(023)8运算符的用途:使指定的位翻转如:0111101000001111对应原数的低4位均置为101110101原数的低4位被翻转若a=3,b=4。则a=ab;b=ba;a=ab;结果是什么?交换两个值,不用临时变量例如:a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:a=a∧b;b=b∧a;a=a∧b;a=011(∧)b=100a=111(a∧b的结果,a已变成7)(∧)b=100b=011(b∧a的结果,b已变成3)(∧)a=111a=100(a∧b的结果,a已变成4)11.5“取反”运算符~~运算是对一个二进制数按位取反,即将0变为1,1变为0。8位全1用377;16位全1用177777;32位全1用37777777777。11.6“左移”运算符<<<<用来将一个数的各二进制位全部左移若干位,并在右边补若干个0。高位左移后溢出,舍弃不起作用。如:<<运算的最大用途是做乘法运算。将乘以2n的幂运算处理为左移n位。11.7“右移”运算符>>>>用来将一个数的各二进制位全部右移若干位,移到右边的低位被舍弃,对无符号数,高位补0。如:a为00001111,则a>>2为0000001111右移一位相当于除以2,右移n位相当于除以2n。(此2位被舍弃)注意:在右移时,需要注意符号位问题。若为无符号数,右移时左边高位移入0。若为有符号数,如果原来符号位为0(正数),则左边移入0;如果原来符号位为1,左边移入0的称为“逻辑右移”,移入1的称为“算术右移”。大多数C语言均采用算术移位。如:a:1001011111101101(113755)8a>>1:0100101111110110逻辑右移,得045766a>>1:1100101111110110算术右移,得14576611.8程序范例例11.1取一个整数a从右端开始的4~7位。步骤:先使a右移4位。即:a>>(7–4+1)a>>4设置一个低4位全为1,其余全为0的数。即:~(~0<<4)将两者进行&运算未右移时的情况右移4位后的情况#includemain(){unsigneda,b,c,d;scanf("%o",&a);b=a>>4;/*b=a>>(m-n+1)*/c=~(~0<<4);/*c=~(~0<>n;将c与b进行按位或运算。c=c¦bmain(){unsigneda,b,c;intn;scanf(“a=%o,n=%d”,&a,&n);b=a<<(16–n);c=a>>n;c=c¦b;printf(“%o\n%o\n”,a,c);}运行情况:a=157653,n=3157653(1101111110101011)275765(0111101111110101)211.9位段有时存储一个信息不必...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

C第2版(第11章_位运算)

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部