go語言-二進制與位運算



一、進制介紹
1、二進制:0,1 -->不能直接用二進制來表示一個整數,用%b輸出二進制
package main
import "fmt"
func main() {
var i int =5
   fmt.Printf("%b",i)   //--->>顯示5的二進制數
   2、十進制:0-9

3、八進制:0-7 -->>以數字0開頭表示
package main
import "fmt"
func main() {
var a int = 011
      fmt.Println("a=",a)
 4、十六進制:0-9 A-F(字母不區分大小寫),以0x開頭表示,字母不區分大小寫
package main
import "fmt"
func main() {
var j =0x11
   fmt.Println("j=",j)
二、進制轉換-其他進制轉十進制(初始進制數*初始進制數的次方)
1、二進制轉十進制:1011=11,1*2的3次方+0*2的2次方+1*2的1+1*2的0次方
2、八進制轉十進制:0123=83,1*8的2次方+2*8的1次方+3*8的0次方
3、十六進制轉十進制:0x34A=842,3*16的2次方+4*16的1次方+10(A)*16的0次方

三、進制轉換-十進制轉其他進制--->>>都是除以要轉的進制數,取余數
1、十進制轉二進制轉,該數除以2,將余數倒過來,就是二進制 10=1010
2、十進制轉八進制,該數除以8,將余數倒過來,就是八進制 156=0234
3、十進制轉十六進制,該數除以16,將余數倒過來,就是十六進制 356=0X164

四、進制轉換-二進制轉其他進制(八進制時三位為一組,十六進制時四位為一組)
1、二進制轉八進制:將二進制分三位為一組,再將每個數*2的次方,1101011=0325
2、二進制轉十六進制:將二進制分四位為一組,再將每個數*2的次方,11010101=0xD5

五、進制轉換-其他進制轉二進制--->>>都是除以要轉的進制數,取余數
1、八進制轉二進制:將每一位八進制數轉成三位的二進制,0237=10011111
2、十六進制轉二進制:將每一位十六進制數轉成四位的二進制,0x237=1000110111

六、位運算:&、|、^、<<、>>,運算需將轉成補碼運算,若是負數,需將結果從補碼轉成反碼,再轉成源碼
1、原碼、反碼、補碼介紹
2、二進制最高位是符號位,0表示正數,1表示負數 --->>1=0000 00001 -1=1000 0001
3、正數的原碼,反碼,補碼都是一樣
4、負數的反碼=原碼符號位數不變,其它取反,補碼=反碼+1
  1-->>原碼:0000 0001-->反碼:0000 0001-->補碼:0000 0001
  -1-->>原碼:1000 0001-->反碼:1111 1110-->補碼:1111 1111
5、0的反碼,補碼都是0
6、在計算機運算的時候都是采用補碼的方式運算
7、負數:補碼轉反碼是-1,反碼轉源碼是取反

8、& 按位與:全1為1,否則為0
   -->>2&3=2 2=0000 0010 3=0000 0011,將2和3的二進制補碼進行&運算
9、| 按位或:有1出1,否則為0 -->>2|3=3 2=0000 0010 3=0000 0011,將2和3的二進制補碼進行|運算
10、^ 按位異或:一個為1,一個為0,結果為1,否則為0
   -->>2^3=1 2=0000 0010 3=0000 0011,將2和3的二進制補碼進行^運算
   -->>-2^2=-4 2=(原碼:1000 0010-->>反碼:1111 1101-->>補碼:1111 1110 2=0000 0011,將-2和2的二進制補碼進行^運算
   -->>運算結果是補碼:1111 1100-->>轉反碼:1111 1011-->>轉源碼:1000 0100=-4

11、右位移運算:低位溢出,符號位不變,並用符號位補溢出的高位
12、左位移運算:符號位數不變,低位補0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM