golang lesson4 -基本的運算

三月踏雪發表於2020-10-24

這節課,我們來談談golang中基本運算。計算機被發明出來,就是為了代替人做運算操作的,CPU的兩個核心模組-運算器和控制器。同樣,做程式繞不開運算這個基礎功能。廢話不多說,直接奔主題:

  • 算術運算子(7個):+ - * / % ++ --,它們分別為:加法、減法、乘法、除法、求模(也叫求餘)、自增、自減。這裡注意一點:在Golang中只支援後置++、後置–。
  • 比較運算子(6個):== != > < >= <=,它們分別為:等於、不等於、大於、小於、大於等於、小於等於。這個和其他語言沒有什麼區別,不過有些語言(比如Javacript)支援 ===(全等),在golang中是不支援的,golang預設是相同型別的資料才可以作比較 。
  • 邏輯運算子(3個): && || !,它們分別為:邏輯與、邏輯或和邏輯非。這個和其他語言也沒有什麼差別,使用時注意短路操作即可。
  • 位運算子(6個):& | ^ << >> &^,他們分別為:按位與、按位或、按位異或、左移、右移、按位清零。golang中專門新增了按位清零操作,主要是有很多時候這個是比較有用的。按位清零的原理如下:
    1 &^ 0 => 1
    1 &^ 1 => 0
    0 &^ 1 => 0
    0 &^ 0 => 0
    也就是如果右邊的位是1,則結果中對應的位就是0(清零)。如果右邊的位是0,則結果跟左邊的一致(濾過)。

示例:

package bitclear

import "testing"

const (
	Readable = 1 << iota
	Writable
	Executable
)

func TestBitClearFunc(t *testing.T) {
	a := 7
	b := a &^ Readable // 將Readable對應的位清零後賦值給變數b,b就失去了可讀屬性
	c := a &^ Writable // 將Writable對應的位清零後賦值給變數c,c就失去了可寫屬性
	d := a &^ Executable // 將Executable對應的位清零後賦值給變數d,d就失去了可執行屬性
	t.Log(a, " ", b, " ", c, " ", d)
}

程式碼裡用到iota、const(…)等概念後面文章會介紹到。

今天的課就到這裡,動手試試吧。

相關文章