位运算

建议只对无符号数做位运算。有符号数会有出错的可能。

 

移位

左移相当于乘以2,右移相当于除以2。

与运算(&) 可以取出某些位的值。 0x12345678 & 0x000000ff = 0x00000078   可以将某些位清零。0x12345678 & 0xffff00ff = 0x12340078

或运算 (|)将某些位至1.  0x12345678 | 0x0000ff00 = 1234ff78

循环右移: (a<<(N-n)) | a>>n

循环左移:(a>>(N-n) ) | a<<n

 

异或 运算 :

与0异或 保持原值不变, 与1异或得到原值的反

自己与自己异或 得到0 ; (汇编语言里面可以用到,将寄存器至0. 位运算比生成一个0在赋值 更快!)

可以用来奇偶校验。

可以用来 交换。如   

a= a^ b ;

b= b^ a;

a = a ^b; 

这个比取一个中间值swap 做交换要简洁的多。(但这种写法的代码效率其实比swap 要低得多)

 PS: 另一个不借助swap 做交换的例子:

a=a*b;

b=a/b;

a=a/b;  其中b 不能为0

 

   

转载于:https://www.cnblogs.com/yestreen/archive/2013/04/29/3051282.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值