亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中位操作有什么用

發布時間:2021-06-24 09:47:04 來源:億速云 閱讀:143 作者:小新 欄目:編程語言

這篇文章主要介紹Go語言中位操作有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

位操作符

與操作:&

1 & 1 = 1

1 & 0 = 0

0 & 1 = 0

0 & 0 = 0

或操作:!

1 | 1 = 1

1 | 0 = 1

0 | 1 = 1

0 & 0 = 0

異或:^

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

左移:<<

1 << 10 = 1024

1 << 20 = 1M

1 << 30 = 1G

右移:>>

1024 >> 10 = 1

1024 >>1 = 512

1024 >>2 = 256

關于上述知識的一個應用實例

可能這個例子在實際中用并不是特別嚴謹,但是也提供了我們寫代碼的一種思路

這里拿微博或者qq用戶的特權為例子:

一個qq號可以用VIP會員,SVIP超級會員,藍鉆用戶,黃鉆用戶,紅鉆用戶....

我們通常的想法可能是如果數據庫中存儲自己會給用戶存這個字段表示這個用戶開通了哪些特權

我們在代碼中的寫法可能也是如下所示:

package main

import (
 "fmt"
)

type users struct {
 name string
 flag uint8
 vip bool
 svip bool
 blue bool
 red bool
 yellow bool
}

func setVip(user users) users {
 user.vip = true
 return user
}

func isVip(user users) {
 if user.vip {
  fmt.Println("user is vip")
 } else {
  fmt.Println("user is not vip")
 }
}

func binaryTest() {
 var user users
 user.name = "test01"
 user.vip = true
 isVip(user)
 user.vip = false
 isVip(user)
}

func main() {
 binaryTest()

}

這種實現方式也可以,但是明顯我們需要為每個類型都做操作,并且如果以后又有更多的各種各樣的會員和鉆有需要添加新的,所以并不是最佳方法,下面我們通過位操作來實現上述的功能,代碼如下:

package main

import (
  "fmt"
)

type users struct {
  name string
  flag uint8
}

// 這里通過位移的方式默認00000 從左邊一次為vip,svip,blue,red,yellow
const (
  vip  = 1
  svip = (1 << 1)
  blue = (1 << 2)
  red  = (1 << 3)
  yello = (1 << 4)
)

// setFlag 用于設置用戶開通了哪些特權
func setFlag(user users, isSet bool, typeFlag uint8) users {
  if isSet == true {
    user.flag = user.flag | typeFlag
  } else {
    user.flag = user.flag ^ typeFlag
  }
  return user
}

//isFlag 用于判斷用戶是否開通某項特權
func isFlag(user users, typeFlag uint8) bool {
  result := user.flag & typeFlag
  return result == typeFlag
}

func binaryTest() {
  var user users
  user.name = "coder"
  user.flag = 0

  //判斷用戶是否是vip
  result := isFlag(user, vip)
  fmt.Printf("user is Vip:%t\n", result)

  //給用戶開通vip,并看用戶是否開通vip
  user = setFlag(user, true, vip)
  result = isFlag(user, vip)
  fmt.Printf("user is Vip:%t\n", result)

  //取消用戶的vip,并查看用戶是否還是vip
  user = setFlag(user, false, vip)
  result = isFlag(user, vip)
  fmt.Printf("user is Vip:%t\n", result)
}

func main() {
  binaryTest()
}

上面代碼就是一種位運算一種非常巧妙的用法,當新添加各種特權的時候只需要在最開始定義的常亮那里添加一行代碼即可,就可以直接實現對這種特權的設置和取消,以及查看是否開通。

附常見的>>右移 <<左移 感覺右移左移應該也是非常常見的使用了

繼續看例子:

package main

import "fmt"

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

進行轉化為二進制 然后向左或者向右移動。

以上是“Go語言中位操作有什么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

内乡县| 舞钢市| 武山县| 苏尼特右旗| 临湘市| 扶绥县| 静安区| 乌鲁木齐市| 叙永县| 竹溪县| 铜川市| 双城市| 麻城市| 寿阳县| 泰来县| 顺昌县| 治多县| 城市| 舟山市| 苍梧县| 格尔木市| 精河县| 米泉市| 葵青区| 丹寨县| 兴宁市| 丹东市| 马公市| 滕州市| 四子王旗| 南郑县| 巴东县| 客服| 方城县| 台中县| 陆川县| 汽车| 永修县| 定边县| 峨边| 黑龙江省|