golang判斷平臺是32位還是64位
阿新 • • 發佈:2018-10-31
在看go語言聖經時,
文中提到可以利用下面的表示式獲取系統是32位還是64位的.
bit := 32 << (^uint(0) >> 63)
開始看到這式子, 感覺很奇怪, 後面自己找了些資料, 搞明白了.
首先是^uint(0)
, uint
型別並不是一個固定長度的型別,
^uint(0)
在32位系統上返回的是0XFFFFFFFF
, 也就是
, 在64位系統上返回的是0xFFFFFFFFFFFFFFFF
, 也就是
.
然後左移(<<
)和右移(>>
)運算順序都是從左到右的, ^為位反.
那麼
-
對於32位系統:
^unit(0)
-
對於64位系統:
^unit(0)
: , ( ) >> 63 得到1, 32 << 1(也就是32左移1位), 得64
好巧妙!
總結:
主要是要明白uint不是一個固定長度的型別.
歡迎補充指正!