今天看《深入理解計算機系統》的看到很相似的符號,特此做了一下總結和區分,以防搞混亂
首先是位運算符號涉及以下幾個符號:
1,&(AND)
2.,|(OR)
3。~(NOT)
4,^(異或)//相同爲0不同爲1
5,》》 《《 左右移動,X>>3,X<<4
這寫位運算最好都是展開成二進制來進行操作,這樣最明顯
然後,和位操作的符號很像的就是邏輯運算了
首先第一個問題是:什麼是邏輯運算
A;所謂的邏輯運算之針對命題來,他們是2個完全不一樣的東西,功能上來說認爲所有非0的參數都表示TRUE,0表示FLASE
其次第二個問題是:他們都有哪些符號?
1,&&(AND)
2,||(OR)
3,!(NOT)
之所以說他們完全不懂請看下面的結果
!0X61 == 0X00
!!0X61 =0X01
他們只有二值表示:0X00 或者0X01
而位運算
0X61&0X03 ==0X01/保持低2位同理類推!!
問題三:>> <<這個兩個位移符號補位是怎麼樣的
0X40<<4,如這個,左移地位都是補充0
而0X40>>4高位到底是補充0還是1?
雖然沒有規定是邏輯左移還是算術左移,但是目前幾乎都是算術左移
算術左移:高位是1補充1,是0補充0
位的操作還有保持某幾位,比如低四位:X&0XF
某幾位置一:X|0XF
任何一個數都是自己的補數即X^X=0;
向左是負數,向右是負數
補碼的表示幾乎都是現在的機器所使用的用法,即最高位是權高位符號位,其權重=-Xw*2^(w-1)
所以有符無符號轉換成補碼是+權重,而補碼轉成無符號則是T2U(X)=2^w-X
通常我們寫某個字長的最小值是是這樣寫的TMIN(32)=-2^31-1 而不是寫成-2^32
當有符號和無符號數據相比較時,會把有符號數據轉化成無符號的數據