04 Golang 運算符

来源:https://www.cnblogs.com/cdc1216/archive/2023/03/12/17209517.html
-Advertisement-
Play Games

一、算術運算符 運算符描述 + 相加 - 相減 * 相乘 / 相除 % 求餘 代碼示例: 1 package main 2 ​ 3 import "fmt" 4 ​ 5 func main() { 6 // 算術運算符 7 a := 5 8 b := 2 9 ​ 10 fmt.Printf("a+b ...


一、算術運算符

運算符描述
+ 相加
- 相減
* 相乘
/ 相除
% 求餘

代碼示例:

 1 package main
 2  3 import "fmt"
 4  5 func main() {
 6     // 算術運算符
 7     a := 5
 8     b := 2
 9 10     fmt.Printf("a+b=%v\n", a+b) // a+b=7
11     fmt.Printf("a-b=%v\n", a-b) // a-b=3
12     fmt.Printf("a*b=%v\n", a*b) // a*b=10
13     fmt.Printf("a/b=%v\n", a/b) // a/b=2
14     fmt.Printf("a%%b=%v\n", a%b) // a%b=1 想要列印%號,可以用%轉義,即 %%
15 }

註意: ++(自增)和 --(自減)在Go語言中是單獨的語句,並不是運算符。

 1 package main
 2  3 import "fmt"
 4  5 func main() {
 6     a := 5
 7     b := 2
 8     
 9     if a > 4 {
10         a++
11     } else {
12         a--
13     }
14     fmt.Print(a)
15 }

二、關係運算符

運算符描述
== 檢查兩個值是否相等,如果相等返回 True 否則返回 False。
!= 檢查兩個值是否不相等,如果不相等返回 True 否則返回 False。
> 檢查左邊值是否大於右邊值,如果是返回 True 否則返回 False。
>= 檢查左邊值是否大於等於右邊值,如果是返回 True 否則返回 False。
< 檢查左邊值是否小於右邊值,如果是返回 True 否則返回 False。
<= 檢查左邊值是否小於等於右邊值,如果是返回 True 否則返回 False。
 1 package main
 2  3 import "fmt"
 4  5 func main() {
 6     a := 5
 7     b := 2
 8  9     fmt.Println(a == b) // false
10     fmt.Println(a != b) // true
11     fmt.Println(a > b)  // true
12     fmt.Println(a >= b) // true
13     fmt.Println(a < b)  // false
14     fmt.Println(a <= b) // false
15 }

 

三、邏輯運算符

運算符描述
&& 邏輯 AND 運算符。 如果兩邊的操作數都是 True,則為 True,否則為 False。
|| 邏輯 OR 運算符。 如果兩邊的操作數有一個 True,則為 True,否則為 False。
! 邏輯 NOT 運算符。 如果條件為 True,則為 False,否則為 True。
 
 1 package main
 2  3 import "fmt"
 4  5 func main() {
 6     a := 5
 7     b := 2
 8     c := 3
 9 10     fmt.Println(a > b && c > b) // true
11     fmt.Println(a < b && c > b) // false
12 13     fmt.Println(a > b || c > b) // true
14     fmt.Println(a < b || c < b) // false
15 16     fmt.Println(!(a > b)) // false
17 }

四、位運算符

位運算符對整數在記憶體中的二進位位進行操作

運算符描述
& 參與運算的兩數各對應的二進位相與。 (兩位均為1才為1)
| 參與運算的兩數各對應的二進位相或。 (兩位有一個為1就為1)
^ 參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。 (兩位不一樣則為1)
<< 左移n位就是乘以2的n次方。 “a<<b”是把a的各二進位全部左移b位,高位丟棄,低位補0。
>> 右移n位就是除以2的n次方。 “a>>b”是把a的各二進位全部右移b位。
 
 1 package main
 2  3 import "fmt"
 4  5 func main() {
 6     a := 5 // 0101
 7     b := 6 // 0110
 8  9     fmt.Println(a & b)  // 4
10     fmt.Println(a | b)  // 7
11     fmt.Println(a ^ b)  // 3
12     fmt.Println(a >> 1) // 2
13     fmt.Println(a << 1) // 10
14 }

分析

 1 a --轉換成二進位--> 0101
 2 b -- 轉換成二進位--> 0110
 3              0101
 4 a & b --->   0110 
 5            --------
 6              0100  ---> 轉換成十進位為 4
 7          
 8              0101
 9 a | b --->   0110 
10            --------
11              0111  ---> 轉換成十進位為 7
12 13              0101
14 a ^ b --->   0110 
15            --------
16              0011  ---> 轉換成十進位為 3
17              
18 a >> 1 ---> 0101 ---> 所有位向右(後)移動一位,在最前面補0 ---> 0010  ---> 轉換成十進位 2
19 20 a << 1 ---> 0101 ---> 所有位向左(前)移動一位,在最後面補0 ---> 1010  ---> 轉換成十進位 10

註意,對於位的移動操作,如果超過原本數據類型的長度,只會從後往前保留對應的位數,如:

1 package main
2 3 import "fmt"
4 5 func main() {
6     a := int8(1) // 定義一個八位的整數
7     fmt.Println(a << 10) // 0
8 }

分析

a<<1 ---> 00000001 ---> 所有位向左移動十位在最後面補0 ---> 10000000000 ---> 但是a最長只能是八位,多以只能從右往左保留八位,00000000,轉換成十進位結果為0

示例:有一堆數字,如果除了一個數字以外,其他數字都出現了兩次,那麼如何找到出現一次的數字?

思路:可以使用異或運算操作,0 與任何數值異或的結果都為值本身,相同的值異或結果為 0

 1 package main
 2  3 import "fmt"
 4  5 func main() {
 6     nums := [...]int{1, 1, 2, 3, 2}
 7     obj := 0
 8     for _, v := range nums {
 9         obj ^= v
10     }
11     fmt.Println(obj)
12 }

五、賦值運算符

運算符描述
= 簡單的賦值運算符,將一個表達式的值賦給一個左值
+= 相加後再賦值
-= 相減後再賦值
*= 相乘後再賦值
/= 相除後再賦值
%= 求餘後再賦值
<<= 左移後賦值
>>= 右移後賦值
&= 按位與後賦值
|= 按位或後賦值
^= 按位異或後賦值


 1 package main
 2  3 import "fmt"
 4  5 func main() {
 6     a := 5
 7  8     var b int
 9     b = a
10     fmt.Println(b)
11 12     a += 2 // a = a + 2
13     a -= 2 // a = a - 2
14     a *= 2 // a = a * 2
15     a /= 2 // a = a / 2
16     a %= 2 // a = a % 2
17 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • web
    1. 表格標簽 1.1 表格的主要作用 表格主要是用於顯示、展示數據,因為它可以讓數據顯示的非常的規整,可讀性非常好。特別是後臺展示數據的時候,能夠熟練運用表格就顯得很重要。一個清爽簡約的表格能夠把繁雜的數據表現得很有條理。 總結:表格不是用來佈局頁面的,而是用來展示數據的。 1.2 表格的基本語法 ...
  • 網頁 1. 什麼是網頁 網站是指在網際網路上根據一定的規則,使用HTML等製作的用於展示特定內容相關的網頁集合。 網頁是網站中的一“頁”,通常是HTML格式的文件,它要通過瀏覽器來閱讀。 網頁是構成網站的基本元素,它通常由圖片、鏈接、文字、聲音、視頻等元素組成。通常我們看到的網頁,常見以.htm或.h ...
  • 相關解釋 ​ 在打開瀏覽器的時候會創建出來若幹進程,以便於完成相關任務,其實最重要的是渲染進程。 ​ 渲染進程的主要工作為:解析HTML,繪製CSS樣式,執行JS代碼等。 ​ 其中在執行JS代碼的時候,會根據代碼任務的類型創建出來若幹隊列,其中常見的有: 延時隊列(setInterval,setTi ...
  • 1. GC觸發條件 1.1. 當新生代滿的時候 1.1.1. Minor GC會被觸發 1.2. 當老年代滿的時候 1.2.1. Full GC會被觸發 1.3. 當堆快要填滿時 1.3.1. 併發GC(如果適用)會被觸發 2. 強制開啟GC 2.1. System.gc()方法 2.1.1. 總是 ...
  • MybatisPlus 快速上手 ORM介紹 ORM(Object Relational Mapping,對象關係映射)是為瞭解決面向對象與關係型資料庫存在的互不匹配的一種技術。持久化(Persistence),即把數據(如記憶體中的對象)保存到可永久保存的 存儲設備 中(如磁碟)。 ORM通過使用描 ...
  • 說明 使用 QCustomPlot 繪圖庫輔助開發時整理的學習筆記。本篇總結 QCustomPlot 在各版本中的更新要點,詳細更新日誌可查看 QCustomPlot 更新日誌 以及各版本的 changelog 文件(部分版本沒有可以線上查看的 changelog 記錄,需要到 下載界面 下載對應的 ...
  • 依賴管理和自動配置 1.依賴管理 1.1什麼是依賴管理 spring-boot-starter-parent 中還有父項目,聲明瞭開發中常用的依賴的版本號 並且進行自動版本仲裁,即如果程式員沒有指定某個依賴jar的版本,則以父版本指定的版本為準 1.2修改自動仲裁/預設版本號 比如我們要將Sprin ...
  • # Create test matrix(造數據) set.seed(6) test = matrix(rnorm(200), 20, 10) test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3 test[11:20, seq(2, 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...