golang的位元運算操作符的使用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

 

&      位元運算 AND|      位元運算 OR^      位元運算 XOR&^     位清空 (AND NOT)<<     左移>>     右移

感覺位元運算操作符雖然在平時用得並不多,但是在涉及到底層效能最佳化或者使用某些trick的時候還是比較有意思。

&(AND) |(OR) 就不提了最常用的東西 會編程就會。

&操作的話是當 兩個數需要同時為1的時候才會保留。 例如 0000 0100 & 0000 1111 => 0000 0100 => 4

| 操作的話是當 兩個數同時為1或者1個為1一個不為1的時候會保留。 例如 0000 0100 | 0000 1111 => 0000 1111 => 15

 

^(XOR) 在go語言中XOR是作為二元運算子存在的:

但是如果是作為一元運算子出現,他的意思是按位取反,例如

package mainimport "fmt"func main() {    x := 4    fmt.Println(^x)}output: -5

如果作為二元運算子則是

package mainimport "fmt"func main() {    x := 4    y := 2    fmt.Println(x^y)}output: 6

XOR是不進位加法計算,也就是異或計算。0000 0100 + 0000 0010 = 0000 0110 = 6

 

 &^ (AND NOT)位清空運算和被運算變數位置有關係,先看一個例子:

package mainimport "fmt"func main() {    x := 2    y := 4    fmt.Println(x&^y)}output: 2

x&^y==x&(^y) 首先我們先換算成2進位  0000 0010 &^ 0000 0100 = 0000 0010 如果ybit位上的數是0則取x上對應位置的值, 如果ybit位上為1則結果位上取0

 

>>右移 <<左移 感覺右移左移應該也是非常常見的使用了 繼續看例子:

package mainimport "fmt"func main() {    x := 2    y := 4    fmt.Println(x<<1)    fmt.Println(y>>1)}output:4 2

進行轉化為二進位 然後向左或者向右移動。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.