如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0
應用:(1)清零
若想對乙個儲存單元清零,即使其全部二進位制位為0,只要找乙個二進位制數,其中各個位符合一下條件:
原來的數中為1的位,新數中相應位為0。然後使二者進行&運算,即可達到清零目的。
a 00101011
b 10010100
c 00000000 //c = a & b
(2)取乙個數中某些指定位
若有乙個整數a(2byte),想要取其中的低位元組,只需要將a與8個1按位與即可。
a 00101100 10101100
b 00000000 11111111
c 00000000 10101100 //c = a & b
(3)保留指定位:
a 01010100
b 00111011
c 00010000 //c = a & b
兩個相應的二進位制位中只要有乙個為1,該位的結果值為1。借用邏輯學中或運算的話來說就是,一真為真
應用:將乙個資料的某些位定值為1
a 00110000
b 00001111
c 00111111 //c = a | b
若參加運算的兩個二進位制位值相同則為0,否則為1
應用:(1)使特定位翻轉 找乙個數,對應x要翻轉的各位,該數的對應位為1,其餘位為零,此數與x對應位異或即可。
例:x=10101110,使x低4位翻轉,用x ^ 0000 1111 = 1010 0001即可得到。
(2)與0相異或,保留原值 ,x ^ 0000 0000 = 1010 1110。
(3)交換a和b
不用臨時變數,交換兩個值
計算前:
a=3,即011(2);b=4,即100(2)
計算過程:
a=a ^ b; //即111 = 011 ^ 100
b=b ^ a; //即011 = 100 ^ 111
a=a ^ b; //即100 = 111 ^ 011
計算後:
a=100(2)即 4 ;b = 011(2)即 3;
如果兩個不同長度的資料進行位運算時,系統會將二者按右端對齊,然後進行位運算。
以「與」運算為例說明如下:我們知道在c語言中long型佔4個位元組,int型佔2個位元組,如果乙個long型資料與乙個int型資料進行「與」運算,右端對齊後,左邊不足的位依下面三種情況補足,
(1)如果整型資料為正數,左邊補16個0。
(2)如果整型資料為負數,左邊補16個1。
(3)如果整形資料為無符號數,左邊也補16個0。
如:long a=123;int b=1;計算a & b。
a&b
a 0000 0000 0111 1011
b 0000 0000 0000 0001
= 0000 0000 0000 0001
如:long a=123;int b=-1;計算a & b。
a&b
a 0000 0000 0111 1011
b 1111 1111 1111 1111
= 0000 0000 0111 1011
如:long a=123;unsigned int b=1;計算a & b。
a&b
a 0000 0000 0111 1011
b 0000 0000 0000 0001
= 0000 0000 0000 0001
菜鳥進擊過程中忽略的知識點
程式設計實踐中經常會忽略一些比較小的知識點,歸根究底還是基礎不夠紮實,因此把這些零散的內容總結一下來夯實基礎 知識改變命運,為了大電視 大沙發 大衛生間 halcon與c 聯合程式設計時,利用輸出流輸出halcon型別的變數,此時需要進行強制型別轉換 若函式的返回型別為byte 取值範圍0 255 ...
筆試中遇到的知識點小結(1)
這兩天啃各公司的校招筆試題目,那些知識上的漏洞和忘記的部分能彌補多少就彌補多少,很多細節的問題,就不直接貼上資料和部落格了,在此一一存為連線記錄一下。1 關於字尾表示式,也就是逆波蘭表示式,這是編譯原理裡學過的,我都忘記了,維基百科中的例子一看就懂 2 今天還看到了關於sizeof很細節的乙個東西,...
Android開發過程中的幾個小知識點
1.在程式的manifest裡面對應的activity裡面新增android windowsoftinputmode adjustresize 屬性,可以實現開啟輸入法時,介面自動上移,不被輸入法遮蓋。2.新增按鈕的按下效果時,可以在drawable資料夾下新建乙個xml檔案,裡面編寫乙個selec...