xuxinjie

  IT博客 :: 首页 :: 联系 :: 聚合  :: 管理
  3 Posts :: 0 Stories :: 2 Comments :: 0 Trackbacks

 

今天第一次到IT博客网写文章,确切地说应该是转文章,哈哈。 之前也看到IT博客网里面有位运算符巧妙应用的文章,可是后来又看到了一篇英文文章里也写了,干脆转过来吧,哈哈。

转自:http://www.codeproject.com/KB/cpp/Bitwise_Operation.aspx

1
,交换两个变量的值,不许使用第三个变量。

void __SWAP(int *a, int *b){
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}

a = 5

0

0

0

0

0

1

0

1

b = 6

0

0

0

0

0

1

1

0


第一次异或处理之后:

a

0

0

0

0

0

0 (*)

1 (*)

1

b

0

0

0

0

0

1

1

0


第二次异或处理之后:

a

0

0

0

0

0

0

1

1

b

0

0

0

0

0

1

0 (*)

1 (*)


第三次异或处理之后:数值已经互换过来了。

a

0

0

0

0

0

1 (*)

1

0 (*)

b

0

0

0

0

0

1

0

1




2
,判断一个数是否为2的整数次幂。

法一:(((a)&(a-1))==0)?1:0

Number

128

64

32

16

8

4

2

1

128

1

0

0

0

0

0

0

0

128-1=127

0

1

1

1

1

1

1

1

128 bitwise-AND 127

0

0

0

0

0

0

0

0


法二:(((a)&(-a))==a)?1:0

Number

128

64

32

16

8

4

2

1

4

0

0

0

0

0

1

0

0

-4(补码)

1

1

1

1

1

1

0

0

4&(-4)

0

0

0

0

0

1

0

0

posted on 2008-11-18 23:23 蓝精灵 阅读(848) 评论(1)  编辑 收藏 引用

Feedback

# re: 两数互换,不需第三变量(位运算的巧妙应用) 2008-11-22 00:44 游子
It is relly wonderful that swap two values by ^.  回复  更多评论
  

只有注册用户登录后才能发表评论。