淺識位運算

2021-10-24 14:34:07 字數 1516 閱讀 6994

引言:

因為不懂一道演算法解析裡的一條語句,然後翻來覆去的查,最後發現是位運算方面的知識,只好順便學一下了,奇奇怪怪的知識又增加了。

位邏輯運算:

1.&運算

0&1=0;

0&0=0;

1&0=0;

1&1=1;

&運算通常可以用來二進位制取位操作,例如乙個數&1就是取最末尾的數(因為0&1=0,1&1=1,不改變末尾的值)。

可以用來判斷奇偶性,二進位制的末尾為0,則這個數為偶數,二進位制的末尾為1,則這個數為奇數。(因為乙個數為偶數,必定第一次能被2整除,所以末尾為0,反之,為奇數)

**:

int n;

while

(cin>>n)

else cout<"為奇數\n"

;}

2. | 運算

0|0=0;

0|1=1;

1|0=1;

1|1=1;

| 運算通常用於二進位制特定位上的無條件賦值,例如乙個數|1的結果就是把二進位制最末位強行變為1。

如果需要把二進位制最末位變成0,對這個數 |1(強行轉化為奇數)之後再減1就可以了,其實際意義就是把這個數強行變成最接近的偶數

**:

int n;

while

(cin>>n)

3. ^ 運算

相同為0,不同為1

0^0=0;

1^1=0;

1^0=1;

0^1=1;

滿**換律,即a ^ b ^ c = b ^ c ^ a

兩個相同的數做異或運算結果為0,即a^a=0,任何數和0做異或結果還是這個數本身:a ^ 0 = a;

^ 運算可以用於簡單的加密,比如原始值int a = 19880516;金鑰 int key =1314520; 進行加密 int data=key^a = 20665500;解密 data^key == a;

也可以用來奇偶分離兩個數。

位移運算:

《運算a《定義一些常量可能會用到《運算。你可以方便的用1<<16 -1 來表示65535(unsingned int 最大值16位系統)。很多演算法和資料結構要求資料模組必須是2的冪,此時就可以用《來定義max_n等常量。

>>運算

和《相似,a>>b表示二進位制右移b位(去掉末b位),相當於a除以2的b次方(取整)。我們經常用》1來代替 /2(div 2),比如二分查詢、堆的插入操作等等。想辦法用》代替除法運算可以使程式的效率大大提高。最大公約數的二進位制演算法用除以2操作來代替慢的出奇的%(mod)運算,效率可以提高60%。

int a =100;

a/4 ==a>>2;

遞迴淺識1

遞迴遞迴,就是先遞再歸,有兩個過程,分別是遞和歸,從形式上來看,如果乙個方法內部呼叫了自己本函式,我們這種情況為遞迴 遞迴的三要素 1.找重複 子問題 2.找重複中的變化量 引數 3.找遞迴的出口 某一條件 如果乙個函式,自己呼叫了自己,但是又沒有遞迴的出口,那麼便會出現stackoverflow的...

gitignre原理淺識

在專案過程中,由於需要忽略某乙個檔案,所以新建了乙個.gitignore檔案。但是,與我想象的有些不太一樣,和我 pair 的小夥伴直接將.gitignore檔案建在了當前目錄下。結構大致如下 dockerfile gemfile readme.md auto dev environment rub...

JS學習 PHP淺識

1.php檔案裡面可以放html,css,js,php等 但是html檔案裡面不能放php 2.php 不能直接瀏覽器預覽,經過伺服器編譯的。必須通過伺服器來預覽。3.檔案目錄一定要放到伺服器www目錄下面。最好是防止資料夾,不要直接在www目錄下面直接放檔案。整個路徑不能出現中文。4.前後端最好實...