掌握位運算對了解計算機本身具有很大的幫助,這需要長時間不斷地用二進位制思維來「模擬」計算機的運算過程^-^才能熟練,建議大家對於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 系統中,壓縮檔案...