之前是寫java的,沒有無符號有符號之分,最近刷題碰到了位運算的題,就想把這個搞清楚一點。
信陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
另外常用的int類型是有符號數(shù),位長取決于你的電腦的位長,電腦是64位的int就是64位的。
左移
右移
首先無符號數(shù)沒啥好說的,不管左移還是右移都是補0
有符號數(shù),以int為例(64位)
老樣子,機器內(nèi)存的是補碼
以7fffffffffffffffff為例
從前三個輸出看,沒有辦法直接給int賦最大值(16進制),全f的話會報錯,也就是不能直接賦值符號位,
但是第四個輸出來看,這里的運算是邏輯位移,輸出-2(ffffffffffffffe,找了半天也沒找到怎樣輸出正兒八經(jīng)的16進制數(shù)),也就是位移包括符號位.
之后再右移多少位都是-1(ffffff...f),就是補碼位移規(guī)則
綜上:
。。。。好亂
使用簡單的 make 調(diào)用創(chuàng)建的通道叫做無緩沖通道,但 make 還可以接受第二個可選參數(shù),一個表示通道容量的整數(shù)。如果容量是 0,make 創(chuàng)建一個無緩沖通道。
無緩沖通道上的發(fā)送操作將被阻塞,直到另一個 goroutine 在對應(yīng)的通道上執(zhí)行接受操作,這時值傳送完成,兩個 goroutine 都可以繼續(xù)執(zhí)行。相反,如果接受操作先執(zhí)行,接收方 goroutine 將阻塞,直到另一個 goroutine 在同一個通道上發(fā)送一個值。使用無緩沖通道進行的通信導(dǎo)致發(fā)送和接受操作 goroutine 同步化。因此,無緩沖通道也稱為同步通道。當(dāng)一個值在無緩沖通道上傳遞時,接受值后發(fā)送方 goroutine 才能被喚醒。
緩沖通道上的發(fā)送操作在隊列的尾部插入一個元素,接收操作從隊列的頭部移除一個元素。如果通道滿了,發(fā)送操作會阻塞所在的 goroutine 直到另一個 goroutine 對它進行接收操作來留出可用的空間。反過來,如果通道是空的,執(zhí)行接收操作的 goroutine 阻塞,直到另一個 goroutine 在通道上發(fā)送數(shù)據(jù)。
如果給一個 nil 的 channel 發(fā)送數(shù)據(jù),會造成永遠阻塞。
如果從一個 nil 的 channel 中接收數(shù)據(jù),也會造成永久阻塞。 給一個已經(jīng)關(guān)閉的 channel 發(fā)送數(shù)據(jù), 會引起 panic。
從一個已經(jīng)關(guān)閉的 channel 接收數(shù)據(jù), 如果緩沖區(qū)中為空,則返回一個 零 值。
左移運算符()
將一個運算對象的各二進制位全部左移若干位(左邊的二進制位丟棄,右邊補0)。
例:a = a 2 將a的二進制位左移2位,右補0,
左移1位后a = a * 2;
若左移時舍棄的高位不包含1,則每左移一位,相當(dāng)于該數(shù)乘以2。
右移運算符()
將一個數(shù)的各二進制位全部右移若干位,正數(shù)左補0,負數(shù)左補1,右邊丟棄。
操作數(shù)每右移一位,相當(dāng)于該數(shù)除以2。
例如:a = a 2 將a的二進制位右移2位,
左補0 or 補1 得看被移數(shù)是正還是負。
當(dāng)您的代碼使用外部包時,這些包(作為模塊分發(fā))成為依賴項。隨著時間的推移,您可能需要升級或更換它們。Go 提供了依賴管理工具,可幫助您在合并外部依賴項時確保 Go 應(yīng)用程序的安全。
本主題介紹如何執(zhí)行任務(wù)以管理您在代碼中承擔(dān)的依賴項。您可以使用 Go 工具執(zhí)行其中的大部分操作。本主題還介紹了如何執(zhí)行其他一些您可能會覺得有用的依賴相關(guān)任務(wù)。
您可以通過 Go 工具獲取和使用有用的包。在 pkg.go.dev 上,您可以搜索您可能覺得有用的包,然后使用go命令將這些包導(dǎo)入您自己的代碼中以調(diào)用它們的功能。
下面列出了最常見的依賴項管理步驟。
在 Go 中,您將依賴項作為包含您導(dǎo)入的包的模塊來管理。此過程由以下機構(gòu)支持:
您可以搜索pkg.go.dev以查找具有您可能覺得有用的功能的軟件包。
找到要在代碼中使用的包后,在頁面頂部找到包路徑,然后單擊復(fù)制路徑按鈕將路徑復(fù)制到剪貼板。在您自己的代碼中,將路徑粘貼到導(dǎo)入語句中,如下例所示:
在您的代碼導(dǎo)入包后,啟用依賴項跟蹤并獲取包的代碼進行編譯。
要跟蹤和管理您添加的依賴項,您首先要將代碼放入其自己的模塊中。這會在源代碼樹的根目錄創(chuàng)建一個 go.mod 文件。您添加的依賴項將列在該文件中。
要將您的代碼添加到它自己的模塊中,請使用 go mod init命令。例如,從命令行切換到代碼的根目錄,然后按照以下示例運行命令:
該go mod init命令的參數(shù)是您的模塊的模塊路徑。如果可能,模塊路徑應(yīng)該是源代碼的存儲庫位置。
如果一開始您不知道模塊的最終存儲庫位置,請使用安全的替代品。這可能是您擁有的域的名稱或您控制的另一個名稱(例如您的公司名稱),以及來自模塊名稱或源目錄的路徑。
當(dāng)您使用 Go 工具管理依賴項時,這些工具會更新 go.mod 文件,以便它維護您的依賴項的當(dāng)前列表。
添加依賴項時,Go 工具還會創(chuàng)建一個 go.sum 文件,其中包含您所依賴的模塊的校驗和。Go 使用它來驗證下載的模塊文件的完整性,特別是對于在您的項目上工作的其他開發(fā)人員。
在代碼中包含存儲庫中的 go.mod 和 go.sum 文件。
當(dāng)您運行g(shù)o mod init創(chuàng)建用于跟蹤依賴項的模塊時,您指定一個模塊路徑作為模塊的名稱。模塊路徑成為模塊中包的導(dǎo)入路徑前綴。一定要指定一個不會與其他模塊的模塊路徑?jīng)_突的模塊路徑。
至少,一個模塊路徑只需要表明它的來源,例如公司或作者或所有者名稱。但是路徑也可能更能描述模塊是什么或做什么。
模塊路徑通常采用以下形式:
1、Go 工具可以在其中找到模塊源代碼的存儲庫的位置。
例如,它可能是github.com/ /.
如果您認為您可能會發(fā)布模塊供其他人使用,請使用此最佳實踐。
2、一個你控制的名字。
如果您不使用存儲庫名稱,請務(wù)必選擇一個您確信不會被其他人使用的前綴。一個不錯的選擇是您公司的名稱。避免使用常用術(shù)語,例如widgets、utilities或 app。
Go 保證以下字符串不會在包名稱中使用。
1、test– 您可以將test用作模塊路徑前綴以便代碼用于在另一個模塊中本地測試功能進行測試。
使用test作為模塊路徑前綴是測試的一部分。例如,您的測試本身可能會運行g(shù)o mod init test,然后以某種特定方式設(shè)置該模塊,以便使用 Go 源代碼分析工具進行測試。
2、example– 在某些 Go 文檔中用作模塊路徑前綴,例如在創(chuàng)建模塊以跟蹤依賴關(guān)系的教程中。
請注意,Go 文檔還用于example.com說明示例何時可能是已發(fā)布的模塊。