位运算

位运算符是指它们对每位进行操作,而不影响左右两侧的位。注意请勿将位运算符和逻辑运算符(&&、||、!)相混淆,常规的逻辑运算对整个值进行操作。

位运算符有:~(取反)、&(位与)、|(位或)、^(位异或)

1)二进制反码或按位取反:~

一元运算符~将每个1变为0,每个0变为1.

例如:

~(10011011)    // 表达式

(01100100)      // 结果值


2)位与(AND):&

二进制位运算符&通过对两个逐位进行比较相与产生一个新值。对于每个位,只有两个操作数的对应位都为1时结果才为1。

例如:

(11000101)&(01101110)        //表达式 

(01000010)                                  //结果值


3)位或(OR):|

二进制运算符 | 通过对两个操作数逐位相或产生一个新值。对于每个位,如果其中任意操作数中对应的位为1,那么结果为就为1。

例如:

(00110001)|(01011101)           // 表达式

(01111101)                                   //结果值


4)位异或:^

二进制运算符^对两个操作数逐位相异或。对于每个位,如果操作数的对应位只有一个为1,那么结果为1。

例如:

(00110101)^(11010111)            //表达式

 (1110010)                                      // 结果值


位运算符还可以与赋值运算符组合:&=、|=、~=、^=

例如:

new&=(0314)                  // 等价于

new=new&(0314)


掩码:是某些位设为开(1)而某些位设置为关(0)的位组合。

使用&将一个数值与掩码相组合时,例如:定义符号常量MASK为2,即二进制为00000010,只有位1是非零。那么:

flags=flags&MASK;

这个语句将导致flags的除位1之外所有位都被为0,原因是它的任何位使用&运算符与0组合都得0;

位1将保持不变。



移位运算符:<<(左移)、>>(右移)

1)左移:<<

左移运算符<<将它左移操作数的值的每位向左移动,移动的位数将由它右侧操作数决定。空出的位有0填充,并且丢弃移出左侧操作数末端的位。

例如:

(10001010)<<2;            //表达式

(00101000)                    //结果值  


2)右移:>>

右移运算符>>将它左侧的操作数的每位向右移动,移动的位数由它右侧的操作数决定。丢弃移出>>左侧操作数右端的位。对于无符号类型,使用0填充左端空出的位。对于有符号类型,结果依赖于机器。空出的位有可能是用0填充,或者是使用符号位(最左端的)副本填充。

例如:

(10001010)>>2                      //表达式,有符号值

(00100010)                            //在某些系统上的值

(10001010)>>2                     //表达式,有符号值

(11100010)                            //在另一些系统上的值

(10001010)>>                        //表达式,无符号值

(00100010)                            // 所有系统上的值



移位运算符对2的幂的乘法和除法:

number<<n;                                     //number乘以2的n次幂

number>>n;                                     //如果number非负,则用number除以2的n次幂


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值