位運算應該知道的一些基礎知識

2021-04-16 23:52:21 字數 1556 閱讀 3026

掌握位運算對了解計算機本身具有很大的幫助,這需要長時間不斷地用二進位制思維來「模擬」計算機的運算過程^-^才能熟練,建議大家對於1111=15(10)=ff(16)=17(8)以內的所有二進位制表示都要牢記在心。下面本人介紹在位運算方面應該知道的一些常用方法,很希望大家能把關於位運算的一些技巧共享出來:)

and運算:

and一般都是用來做清「零」操作,因為一些特殊的需求可能會用到這樣的迴圈,1,2,3,4,5,6,7.....15,0。注意是從1開始然後到0結束,這類應用最早我實在乙個畫圖程式中看到的**,畫了乙個矩形,然後程式自動分配16個點,所以就看到了類似下面的**。

for (int i = 1; i <= 16; i++)

當然了你只要用最後乙個數進行and運算都是回歸到0。

如果我想獲得它的前4位:

0101 1111

and1111 0000

=0101 0000

同理,後四位:

0101 1001

and0000 1111

=0000 1001

還有時會用and運算來判斷乙個數是奇數還是偶數,很簡單只要跟1比較就可以了。

for(int i = 0;i < 100; i++)

or運算:

任何數跟「0」運算或者跟自己運算都是自己。

其主要用來將位的值置為「1」,例如將後四位置為1。

1000 1001

or0000 1111

=1000 1111

同理將前四位置為「1」

0001 1001

or1111 0000

=1111 1001

xor運算:

最早知道xor運算的時候,不知道是那個公司出的面試題,說交換a,b兩個值不使用第三者變數。當時是一頭霧水不知如何下手,其實xor用起來很簡單:

a = a ^ b

b = b ^ a

a = a ^ b

任何兩個相等的值xor運算後都等於零,上面的等式拆開來就是:

b = b ^ (a ^ b)    b被清掉

a = (a ^ b) (b ^ a ^ b)    剩下個b

如果等號兩邊同時具有相同的數,就不用去拆開了:

b = b ^ (a ^ b)

a = a ^ (b ^ a)

not運算:

如果想得到這個數的負數很簡單,not運算後再or1即可,當然這種方式不安全,因為無符號和有符號並不是等長的,超邊界的時候會出現問題。

~25 = -26

~25 | 1 = -25

《運算:

就是乘2的n次方運算:

3 << 2 = 3 * 2^2 = 12

-3 << 2 = -3 * 2^2 = -12

>>運算:

除2的n次方運算:

16 >> 2 = 16 / 2^2 = 4

-16 >> 2 = -16 / 2^2 = -4

如果不同長度的兩個資料進行運算,系統自動將兩者的長度對其,高階為補"零",有符號的數符號位始終為"1"。

各位還有什麼經驗,可以一起來信分享。

位運算基礎知識

位運算子主要針對二進位制,它包括了 與 非 或 異或 從表面上看似乎有點像邏輯運算子,但邏輯運算子是針對兩個關係運算子來進行邏輯運算,而位運算子主要針對兩個二進位制數的位進行邏輯運算。下面詳細介紹每個位運算子。1 與運算子 與運算子用符號 表示,其使用規律如下 兩個運算元中位都為1,結果才為1,否則...

一些基礎知識

關於cd cd 返回剛才的位置 關於ls ls l,簡寫ll ls a顯示的檔案以.開頭,隱藏檔案 la al 關於cp cp r tmp dir 拷目錄 tmp拷到dir 需要加 r的 cp rm 10 13 1.grep 在乙個字元集合中找到符合條件的行輸出 如 grep hello file ...

一些基礎知識

linux基礎知識考查 1 在linux 系統中,以 檔案 方式訪問裝置 2 前台起動的程序使用 ctrl c 終止。3 在使用ls 命令時,用八進位制形式顯示非列印字元應使用引數 b 4 在linux 系統中,用來存放系統所需要的配置檔案和子目錄的目錄是 etc 5 在linux 系統中,壓縮檔案...