好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識(shí)庫 > Go語言中你所不知道的位操作用法

Go語言中你所不知道的位操作用法

熱門標(biāo)簽:浙江高頻外呼系統(tǒng)多少錢一個(gè)月 黃岡人工智能電銷機(jī)器人哪個(gè)好 惠州電銷防封電話卡 汕頭小型外呼系統(tǒng) 阿里云ai電話機(jī)器人 鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 濱州自動(dòng)電銷機(jī)器人排名 釘釘有地圖標(biāo)注功能嗎 建造者2地圖標(biāo)注

前言

因?yàn)橹耙恢焙雎缘木褪撬姓Z言中關(guān)于位操作,覺得用處并不多,可能用到也非常簡(jiǎn)單的用法,但是其實(shí)一直忽略的是它們的用處還是非常大的,下面先回顧一下位操作符的基礎(chǔ)

位操作符

與操作:

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

關(guān)于上述知識(shí)的一個(gè)應(yīng)用實(shí)例

可能這個(gè)例子在實(shí)際中用并不是特別嚴(yán)謹(jǐn),但是也提供了我們寫代碼的一種思路

這里拿微博或者qq用戶的特權(quán)為例子:

一個(gè)qq號(hào)可以用VIP會(huì)員,SVIP超級(jí)會(huì)員,藍(lán)鉆用戶,黃鉆用戶,紅鉆用戶....

我們通常的想法可能是如果數(shù)據(jù)庫中存儲(chǔ)自己會(huì)給用戶存這個(gè)字段表示這個(gè)用戶開通了哪些特權(quán)

我們?cè)诖a中的寫法可能也是如下所示:

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()

}

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

package main

import (
  "fmt"
)

type users struct {
  name string
  flag uint8
}

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

// setFlag 用于設(shè)置用戶開通了哪些特權(quán)
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 用于判斷用戶是否開通某項(xiàng)特權(quán)
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()
}

上面代碼就是一種位運(yùn)算一種非常巧妙的用法,當(dāng)新添加各種特權(quán)的時(shí)候只需要在最開始定義的常亮那里添加一行代碼即可,就可以直接實(shí)現(xiàn)對(duì)這種特權(quán)的設(shè)置和取消,以及查看是否開通。

附常見的>>右移 左移 感覺右移左移應(yīng)該也是非常常見的使用了

繼續(xù)看例子:

package main

import "fmt"

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

進(jìn)行轉(zhuǎn)化為二進(jìn)制 然后向左或者向右移動(dòng)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • golang簡(jiǎn)單位運(yùn)算示例

標(biāo)簽:阿壩 泰安 瀘州 滄州 駐馬店 晉中 東營(yíng) 昭通

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go語言中你所不知道的位操作用法》,本文關(guān)鍵詞  語,言中,你所,不知道,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go語言中你所不知道的位操作用法》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go語言中你所不知道的位操作用法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: tttzzz668.su.6.2.vom| 老女人久久久久精品三级 | 一级毛片在线免费视频| 欧美一卡2卡三卡4卡无卡免费下载| 国产91会所洗浴女技师按摩| 无码亚洲国产欧美区二区| 美女扒开秘?让男人桶爽| 男男涩| 国产精品无码人妻全文免费阅读| 1769手机视频| 在线免费a视频| 少女3电影在线观看| 9国内精品久久久久免费影院| 欧美视频国产| 国产精品情侣自拍| 精品2022露脸国产偷人在视频| 嗯啊哈不要了| 羞羞视频网站在线观看| 国产3p全程普通话太刺激磁力| 亚洲AV无码乱码国产精品黑人| jlzzjlzz全部女高潮视频| 麻麻被调教成了泄欲工具| 就是鲁就是要就要啪| 好紧好湿好硬顶到了好爽A片| 有人有在线看片资源吗www| 国产精品电影在线| 叶子媚一级婬片A片桃花降| 久久99国产精品一区二区| 帝王暗卫含玉势h鞭打臀缝 | 免费看黄网页| 亚洲欧美一区二区| 霍雨浩h文| 国产91会所女技师在线观看| 亚洲欧美在线| 国产美女裸露无遮挡双奶A片视频 中文字幕无码一区二区三区免费 国产伦一区二区三区高清 | 欧洲18至19GAy男同GV片| 日本高清动作片www网站| 国产91热爆TS女装大佬在线| 欧美重囗未猛交AA片| 表妹怂且甜许乘月| 国产在线观看一区二区三区|