第12章 位运算

本文解析了位运算符如&、|、^、~、<<、>>的原理与操作,包括按位与、或、异或、取反、左移和右移,以及它们在数据处理中的清零、取值、交换等实用技巧。通过实例演示了如何利用这些运算符进行高效编程。
摘要由CSDN通过智能技术生成

所谓位运算是指二进制为对象的运算。
 

12.1 位运算和位运算符

位运算符:

  1. & 按位与
  2. |  按位或
  3. ^ 按位异或
  4. ~  按位取反
  5. <<  左移
  6. >>  右移

说明:

  1. 说明位运算符中“~”以外,均为二目(元)运算符,即要求两侧各有一个运算量。如a&b。
  2. 参加位运算符的对象只能是整型或字符类型的数据,不能为实型数据。

12.1.1  “按位与”运算

参加运算的两个数据按二进制进行“与”运算,如果两个相应的二进制都为1,否则该位的结果值为1;否则为0。

0&0=0 ;   0&1=0 ;   1&1=1 ;    1&0=0;

例如7&5并不等于12,应该是进行“按位与”的运算。

00000111(7)   (7的二进制表示111)

00000101(5)& (5的二进制表示101)


00000101(5) 

按位与的用途:

  1. 清零
  2. 取一个数中某一些指定位
  3. 要想将哪一位保留下来,就与一个数进行&运算,在此数在该位取1.

12.1.2  按位或

按位或运算的规则是:两个对应的二进制位中只有有一个1,该位的结果值为1.即

0|0=0;0|1=1;1|0=1;1|1=0;

12.1.3 “ 异或”运算

异或运算符“^”也称XOR运算符。它的规则是:若要参加的运算两个进制位异号,则得到1(真),若同号,则结果为0(假)。即

0^0=0 ; 0^1=1; 1^1=0; 1^0=1

"异或"的意思是判断两个相应的值是否“异”。为“异”(值不同)就取真(1);否则为(0).

异或运算的应用:

  1. 使特定位翻转
  2. 与0相^,保留原值
  3. 交换两个值,不用临时变量

12.1.4  "取反"运算

“~”是一个单目运算符,用来对一个二进制数按位取反,即将0变成1,1变成0.

~025是对八进制25按位取反

0000000000010101(八进制25)

~    (按位取反)


1111111111101010(八进制177752)

12.1.5  左移运算

“<<”用来将一个数的各个二进制数全部左移若干位。

a = a<<2将a的二进制数左移2位,右补零。若a=15,即二进制数00001111,左移两位00111100,得到十进制数10.高位左移溢出,舍去。

12.1.6  右移运算

a>>2表示将a的各二进制右移2位,移到右端的低位被舍弃,对无符号数,高位补0,例如a=017时,将a的二进制形式表示为00001111,右移得00000011.

右移一位相当于除以2,右移n位相当除以2

12.1.7 位运算赋值运算符

位运算符和赋值运算符可以组成复合赋值运算符。如&=,|=,^=,<<=,>>=。等

例如a&=b,相当于a=a&b;a<<=2,相当于a=<<2.

12.1.8  不同长度的数据进行位运算

如果两个数据长度不同(例如short和int)进行位运算时(如a&b,而a为short,b为int),系统就会将二者按右端对齐。如果a为正数,则左侧16位补满0;若a为负数,左侧应补满1;如果a为五符号整数型,则左侧舔满0。

12.3  位  段

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值