6.Golang數(shù)字操作

Go 語(yǔ)言具有嚴(yán)格的靜態(tài)類(lèi)型限制方库,運(yùn)算符操作的數(shù)字類(lèi)型必須是相同類(lèi)型數(shù)據(jù)。且數(shù)字操作不能超出該類(lèi)型的取值范圍弯院,不然計(jì)算溢出得到的結(jié)果就是錯(cuò)的辱士。

一、加減乘除听绳、取模

package main

import "fmt"

func main() {
    // 加 +
    var ui1, ui2 uint8
    ui1 = 1
    ui2 = 2
    ui := ui1 + ui2
    fmt.Println(ui) // 輸出:3

    ui += 255
    fmt.Println(ui) // 溢出后計(jì)算的值就是錯(cuò)的颂碘,輸出:2

    // 減 -
    var i, j int32
    i = 10
    j = 5
    fmt.Println(i - j) // 輸出:5

    // 乘 *
    var f1, f2 float32
    f1 = 1.2
    f2 = 0.2
    // 浮點(diǎn)型的數(shù)字計(jì)算有精度問(wèn)題,float32 精度6位小數(shù)辫红,float64 精度15位小數(shù)凭涂,
    fmt.Println(f1 * f2) // 輸出:0.24000001

    // 除 /
    n1 := 10
    n2 := 3
    fmt.Println(n1 / n2) // 輸出:3,小數(shù)被丟棄

    // 求模贴妻、取余 %
    fmt.Println(n1 % n2) // 輸出余數(shù):1
}

二切油、位運(yùn)算
位運(yùn)算是直接對(duì)數(shù)字在內(nèi)存中存儲(chǔ)的二進(jìn)制數(shù)進(jìn)行操作,所以性能上來(lái)講是最快的運(yùn)算方式名惩。位運(yùn)算一般常見(jiàn)于需要性能優(yōu)化或復(fù)雜的算法中澎胡。位運(yùn)算只作用于整數(shù)類(lèi)型上。
Go 語(yǔ)言中的位運(yùn)算符:

運(yùn)算符 釋義 運(yùn)算規(guī)則
& 按位與娩鹉,兩個(gè)數(shù)對(duì)應(yīng)的二進(jìn)制位相與 同時(shí)為1攻谁,則為1,否則為0
| 按位或弯予,兩個(gè)數(shù)對(duì)應(yīng)的二進(jìn)制位相或 有一個(gè)為1戚宦,則為1,否則為0
^ 按位異或锈嫩,兩個(gè)數(shù)對(duì)應(yīng)的二進(jìn)制位相異或 二進(jìn)制位不同受楼,則為1,否則為0
&^ 按位清空 x&^y 如果ybit位上的數(shù)是0則取x上對(duì)應(yīng)位置的值呼寸,如果ybit位上為1則結(jié)果位上取0
<< 左移 所有二進(jìn)制位左移運(yùn)算符右邊指定的位數(shù)艳汽,高位丟棄,低位補(bǔ)0对雪。左移n位就是乘以2的n次方
>> 右移 所有二進(jìn)制位右移運(yùn)算符右邊指定的位數(shù)河狐,高位補(bǔ)0,低位丟棄瑟捣。右移n位就是除以2的n次方
package main

import "fmt"

func main() {
    var i1, i2, n uint8 // 1個(gè)字節(jié)

    // 按位與 &
    i1 = 2         // 二進(jìn)制:0000 0010
    i2 = 3         // 二進(jìn)制:0000 0011
    n = i1 & i2    // 按位與:0000 0010
    fmt.Println(n) // 輸出:2

    // 按位或 |
    i1 = 10        // 二進(jìn)制:0000 1010
    i2 = 20        // 二進(jìn)制:0001 0100
    n = i1 | i2    // 按位或:0001 1110
    fmt.Println(n) // 輸出:30

    // 按位異或 ^
    i1 = 3         // 二進(jìn)制:0000 0011
    i2 = 4         // 二進(jìn)制:0000 0100
    n = i1 ^ i2    // 按位異或:0000 0111
    fmt.Println(n) // 輸出:7

    // 按位清空 &^
    i1 = 10        // 二進(jìn)制:0000 1010
    i2 = 20        // 二進(jìn)制:0001 0100
    n = i1 &^ i2   // 按位清空:0000 1010
    fmt.Println(n) // 輸出:10

    // 左移 <<
    i1 = 5         // 二進(jìn)制 0000 0101
    n = i1 << 2    // 左移2位:0001 0100
    fmt.Println(n) // 輸出:20

    // 右移 >>
    i2 = 15        // 二進(jìn)制:0000 1111
    n = i2 >> 2    // 右移2位:0000 0011
    fmt.Println(n) // 輸出:3
}

三馋艺、比較大小
大小比較得到的類(lèi)型時(shí)布爾型。運(yùn)算符:>大于迈套、>=大于等于丈钙、<小于、<=小于等于交汤、==等于雏赦。

package main

import "fmt"

func main() {
    fmt.Println(2 > 1)  // 輸出:true
    fmt.Println(1 == 2) // 輸出:false
}

四劫笙、數(shù)字類(lèi)型轉(zhuǎn)換
整型從高位類(lèi)型轉(zhuǎn)低位類(lèi)型會(huì)有精度丟失,浮點(diǎn)型轉(zhuǎn)整型會(huì)丟失小數(shù)點(diǎn)后的值星岗,復(fù)數(shù)型轉(zhuǎn)非復(fù)數(shù)整型時(shí)符號(hào)丟失填大。數(shù)據(jù)類(lèi)型轉(zhuǎn)換格式:目標(biāo)類(lèi)型(轉(zhuǎn)換類(lèi)型)

package main

import "fmt"

func main() {
    // 整型轉(zhuǎn)浮點(diǎn)型
    var i int = 1
    fmt.Printf("%f\n", float32(i)) // 輸出:1.000000

    // 浮點(diǎn)型轉(zhuǎn)整型
    var f float32 = 3.1415926
    fmt.Printf("%d\n", int(f)) // 輸出:3,小數(shù)后丟失

    // float32 轉(zhuǎn) float64
    fmt.Printf("%v\n", float64(f)) // 輸出:3.141592502593994俏橘,6位后的小數(shù)精度是錯(cuò)誤的

    // float64 轉(zhuǎn) float32
    var f2 float64 = 3.141592653589793
    fmt.Println("%v\n", float32(f2)) // 輸出:3.1415927允华,6位后的小數(shù)精度是錯(cuò)誤的
}

五、數(shù)字轉(zhuǎn)字符串
使用 strconv 包中定義的函數(shù)做數(shù)字和字符串轉(zhuǎn)換寥掐。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // int 轉(zhuǎn) string
    var i int = 111
    var s string
    s = strconv.Itoa(i) // 數(shù)字轉(zhuǎn)字符串
    fmt.Println(s)

    // string 轉(zhuǎn) int
    i2, err := strconv.ParseInt(s, 10, 64) // 把 s 轉(zhuǎn)為10進(jìn)制64位數(shù)
    if err == nil {
        fmt.Println(i2) // 輸出:111
    }

    // float 轉(zhuǎn) string
    var f float64 = 3.1415926535
    s1 := strconv.FormatFloat(f, 'f', -1, 64)
    fmt.Println(s1) // 輸出:3.1415926535
    // 第二個(gè)參數(shù)選項(xiàng)靴寂,含義如下:
    // 'b' (-ddddp±ddd,二進(jìn)制指數(shù))
    // 'e' (-d.dddde±dd召耘,十進(jìn)制指數(shù))
    // 'E' (-d.ddddE±dd百炬,十進(jìn)制指數(shù))
    // 'f' (-ddd.dddd,沒(méi)有指數(shù))
    // 'g' ('e':大指數(shù)污它,'f':其它情況)
    // 'G' ('E':大指數(shù)剖踊,'f':其它情況)

    // string 轉(zhuǎn) float
    str := `3.1415926535`
    v1, err := strconv.ParseFloat(str, 32) // ParseFloat 函數(shù)默認(rèn)返回float64類(lèi)型數(shù)據(jù),轉(zhuǎn)成folat32可能會(huì)有精度丟失
    if err == nil {
        fmt.Printf("%v\n", v1) // 輸出:3.1415927410125732
    }
    v2, err := strconv.ParseFloat(str, 64)
    if err == nil {
        fmt.Printf("%v\n", v2) // 輸出:3.1415926535
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衫贬,一起剝皮案震驚了整個(gè)濱河市德澈,隨后出現(xiàn)的幾起案子固惯,更是在濱河造成了極大的恐慌梆造,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葬毫,死亡現(xiàn)場(chǎng)離奇詭異镇辉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)供常,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)摊聋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鸡捐,“玉大人栈暇,你說(shuō)我怎么就攤上這事」烤担” “怎么了源祈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)色迂。 經(jīng)常有香客問(wèn)我香缺,道長(zhǎng),這世上最難降的妖魔是什么歇僧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任图张,我火速辦了婚禮锋拖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祸轮。我一直安慰自己兽埃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布适袜。 她就那樣靜靜地躺著柄错,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苦酱。 梳的紋絲不亂的頭發(fā)上售貌,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音疫萤,去河邊找鬼颂跨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛给僵,可吹牛的內(nèi)容都是我干的毫捣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帝际,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔓同!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蹲诀,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斑粱,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后脯爪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體则北,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年痕慢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尚揣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掖举,死狀恐怖快骗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塔次,我是刑警寧澤方篮,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站励负,受9級(jí)特大地震影響藕溅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜继榆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一巾表、第九天 我趴在偏房一處隱蔽的房頂上張望汁掠。 院中可真熱鬧,春花似錦集币、人聲如沸调塌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)羔砾。三九已至,卻和暖如春偶妖,著一層夾襖步出監(jiān)牢的瞬間姜凄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工趾访, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留态秧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓扼鞋,卻偏偏與公主長(zhǎng)得像申鱼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子云头,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容