位運算的應用

1、判斷一個數字X的i位是否是1spa

方法:code

    if((1 << (i-1)) & x > 0) 
原理:
   1左移(i-1)位,至關於製造了一個就i位上是1其餘位都是0的一個二進制數。將這個數與X進行「與」運算,若是大於0,則表明第i位是1;不然是0
例子:
  x = 13 (1101) 2  i = 3
 ∴ 1 << (i-1) = 1 << 2 = 100 2 = 0100 2 (補上0)
 ∴ (1 << (i-1)) & x
 = 0100 2 & 1101 2
 = 0100 2
  由於其0100大於0,因此這i位是1

2、把一個數字二進制下的第i位改爲1blog

方法:class

   x = x | (1 << (i-1)) 原理

原理:二進制

  與「一」相似,直接看」例子「吧  方法

例子:di

  x = 13 (1101)2  i = 2co

 ∴ 1 << (i-1) = 1 << 1 = 102 = 00102數字

 ∴ x | (1 << (i-1))

 = 11012 | 00102

 = 11112

3、把一個數字二進制下的最靠右的第一個1改爲0(去掉

方法:

   x = x & (x-1) 

原理:

十進制下的數減了1後,二進制下的數最右邊的1確定會變成0,因此經過「與」一下就能夠把最靠右的第一個1改爲0

例子:

  x = 13 (1101)2

 ∴ x-1 = 12 = 11002

 ∴ x & (x-1)

 = 1101& 11002

 = 11002

相關文章
相關標籤/搜索