Go 获取键盘输入,进制转换
生活随笔
收集整理的這篇文章主要介紹了
Go 获取键盘输入,进制转换
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#### Go 獲取鍵盤輸入,進(jìn)制轉(zhuǎn)換
最近愛上<<珂矣的心靈獨(dú)語(yǔ)>> 連續(xù)聽一下禮拜也不覺得厭: 喜歡她的寧?kù)o與安然,喜歡她的坦蕩與歡喜,喜歡她的禪意與智慧;
***撐著一葦江湖,耕煙處, 入時(shí)無***
##### 獲取鍵盤輸入 func Scanln(a ...interface{})(n int,err error) 在換行時(shí)停止掃描,也就是說通過換行來獲得輸入結(jié)束信號(hào) func Scanf(format string, a ...interface{}) (n int,err error) 從標(biāo)準(zhǔn)輸入掃描文本,根據(jù)format 參數(shù)設(shè)定的格式將成功讀取到空白分隔的值保存到傳遞給本函數(shù)的參數(shù),返回成功掃描的個(gè)數(shù)和遇到的錯(cuò)誤;
##### 進(jìn)制
對(duì)于一個(gè)整數(shù), 有四種表示方式:
1. 二進(jìn)制:0,1,在Go中不能直接使用二進(jìn)制表示一個(gè)整數(shù)
2. 十進(jìn)制:0-9
3. 八進(jìn)制:0-7,以數(shù)字0開頭表示
4. 十六進(jìn)制: 0-9,A-F,以0x或0X開頭表示; package mainimport "fmt"func main(){var a int = 10// 以二進(jìn)制輸出fmt.Printf("%b\n",a)// 八進(jìn)制表示var b int = 020fmt.Println(b) //16// 十六進(jìn)制表示var c int = 0x1Afmt.Println(c) }
---
##### 進(jìn)制轉(zhuǎn)換
1. 二進(jìn)制轉(zhuǎn)十進(jìn)制
從最低位開始(最右邊),將每位上的數(shù)提取出來,乘以2的(位數(shù)-1)次方然后求和:
如: 1001 = 1\*2^3 + 0\*2^2 + 0\*2^1 + 1\*2^0 = 9
2. 八進(jìn)制轉(zhuǎn)十進(jìn)制
從最低位開始(最右邊),將每位上的數(shù)提取出來,乘以8的(位數(shù)-1)次方然后求和:
如: 0223 = 2\*8^2 + 2\*8^1 + 3 *8^0 = 128 + 16 + 3 = 147
3. 十六進(jìn)制轉(zhuǎn)十進(jìn)制
從最低位開始(最右邊),將每位上的數(shù)提取出來,乘以16的(位數(shù)-1)次方然后求和:
如: 0x2A = 2\*16^1 + 10\*16^0 = 32 + 10 = 42
4. 十進(jìn)制轉(zhuǎn)二進(jìn)制
將數(shù)字不斷除以2,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的二進(jìn)制
如: 23 轉(zhuǎn)換成二進(jìn)制
23 / 2 = 11 余 1
11 / 2 = 5 余 1
5 / 2 = 2 余 1
2 / 2 = 1 余 0
1 / 2 = 0 余 1
則23 轉(zhuǎn)換成二進(jìn)制 = 10111
5. 十進(jìn)制轉(zhuǎn)八進(jìn)制
將數(shù)字不斷除以8,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的八進(jìn)制
如: 23 轉(zhuǎn)換成八進(jìn)制
23 / 8 = 2 余 7
2 / 8 = 0 余 2
則23 轉(zhuǎn)換成八進(jìn)制 = 027
6. 十進(jìn)制轉(zhuǎn)十六進(jìn)制
將數(shù)字不斷除以16,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的十六進(jìn)制
如: 123 轉(zhuǎn)換成十六進(jìn)制
123 / 16 = 7 余 11
7 / 16 = 0 余 7
則23 轉(zhuǎn)換成十六進(jìn)制 = 0x7b
7. 二進(jìn)制轉(zhuǎn)八進(jìn)制
將二進(jìn)制數(shù)每三位一組(從低位開始組合),轉(zhuǎn)成對(duì)應(yīng)的八進(jìn)制數(shù)即可
如: 10110111 轉(zhuǎn)換成八進(jìn)制
010 110 111 = 267
8. 二進(jìn)制轉(zhuǎn)十六進(jìn)制
將二進(jìn)制數(shù)每四位一組(從低位開始組合),轉(zhuǎn)成對(duì)應(yīng)的十六進(jìn)制數(shù)據(jù)即可
如: 10110111 轉(zhuǎn)換成十六進(jìn)制
1011 0111 = 0xb7
9. 八進(jìn)制轉(zhuǎn)二進(jìn)制
將八進(jìn)制數(shù)每一位轉(zhuǎn)成對(duì)應(yīng)的一個(gè)3位的二進(jìn)制數(shù)即可
如: 012 = 001 010
10.十六進(jìn)制轉(zhuǎn)二進(jìn)制
將十六進(jìn)制每一位轉(zhuǎn)成對(duì)應(yīng)的一個(gè)4位的二進(jìn)制數(shù)即可
如:0xc81 = 1100 1000 0001
##### 位運(yùn)算
在進(jìn)行位運(yùn)算學(xué)習(xí)前先來了解一下什么是原碼,反碼,補(bǔ)碼;
1. 對(duì)于有符號(hào)的而言: 二進(jìn)制最高位是符號(hào)位: 0 為正數(shù),1為負(fù)數(shù)
1 --> [0000 0001]
-1 --> [1000 0001] // 二進(jìn)制最高位是符號(hào)位,
2. 正數(shù)的原碼,反碼,補(bǔ)碼都一樣;
3. 負(fù)數(shù)的反碼=它的符號(hào)位不變,其它位置取反
-1 -->原碼[1000 0001] 反碼[1111 1110] 補(bǔ)碼[1111 1111]
4. 負(fù)數(shù)的補(bǔ)碼=它的反碼加1
5. 0 的反碼,補(bǔ)碼都是0
6. 計(jì)算機(jī)在運(yùn)算的時(shí)候都是以補(bǔ)碼的方式來運(yùn)算的;
如: -1 + 3
-1 的補(bǔ)碼: [1111 1111]
3 的補(bǔ)碼: [0000 0011]
結(jié)果的補(bǔ)碼: [0000 0010]-->反碼[0000 0010] --> 原碼[0000 0010] = 2
##### 位運(yùn)算符和移位運(yùn)算符
&: 按位與 兩位全為1, 結(jié)果為1,否則為0
|: 按位或 兩位全為0,結(jié)果為0 ,否則為1
^: 按位異或 兩位一個(gè)為0,一個(gè)為1,結(jié)果為1,否則為0
package mainimport "fmt"func main() {var a int = 10var b int = -2// -2 的原碼: [1000 0010]// -2 的反碼: [1111 1101] 符號(hào)位不變,其它位取反// -2 的補(bǔ)碼: [1111 1110] 反碼+1// 10 的補(bǔ)碼: [0000 1010]// 結(jié)果的補(bǔ)碼: [0000 1010]--> 原碼[0000 1010] = 10fmt.Println(a&b) // 10// 結(jié)果的補(bǔ)碼: [1111 1110] --> 反碼[1111 1101] --> 原碼[1000 0010] = -2fmt.Println(a|b) // -2// 結(jié)果的補(bǔ)碼: [1111 0100] --> 反碼[1111 0011] --> 原碼[1000 1100] = -12fmt.Println(a^b)// -12}
移位運(yùn)算符
<< , >> 左移,右移
規(guī)則:
">>" 右移運(yùn)算, 低位溢出,符號(hào)位不變,并用符號(hào)位補(bǔ)溢出的高位
"<<" 左移運(yùn)算, 符號(hào)位不變,低位補(bǔ)0
package mainimport "fmt"func main() {var a int = 10// 10 的補(bǔ)碼: [0000 1010] --> 右移3位的補(bǔ)碼: [0000 0001] = 1fmt.Println(a>>3) // 1// 10 的補(bǔ)碼: [0000 1010] --> 左移3位的補(bǔ)碼: [0101 0000] = 80fmt.Println(a<<3) // 80var b int = -2// -2 的原碼: [1000 0010] --> 反碼[1111 1101] --> 補(bǔ)碼[1111 1110] --> 右移3 位的補(bǔ)碼[1111 1111]// 結(jié)果的反碼: [1111 1110] --> 原碼[1000 0001] = -1fmt.Println(b>>3) // -1// -2 的原碼: [1000 0010] --> 反碼[1111 1101] --> 補(bǔ)碼[1111 1110] --> 左移3 位的補(bǔ)碼[1111 0000]// 結(jié)果的反碼: [1110 1111] --> 原碼[1001 0000] = -16fmt.Println(b<<3) // -16}
以上進(jìn)制部分是基礎(chǔ)的計(jì)算機(jī)知識(shí), 并非Go 語(yǔ)言特有, 還是很有必要學(xué)習(xí)一下的, 加油!
個(gè)人微信公眾號(hào): "開胃咸菜", 在同步更新, 微信公眾號(hào)文章為最新,歡迎大家搜索關(guān)注,一同交流學(xué)習(xí),謝謝
最近愛上<<珂矣的心靈獨(dú)語(yǔ)>> 連續(xù)聽一下禮拜也不覺得厭: 喜歡她的寧?kù)o與安然,喜歡她的坦蕩與歡喜,喜歡她的禪意與智慧;
***撐著一葦江湖,耕煙處, 入時(shí)無***
##### 獲取鍵盤輸入 func Scanln(a ...interface{})(n int,err error) 在換行時(shí)停止掃描,也就是說通過換行來獲得輸入結(jié)束信號(hào) func Scanf(format string, a ...interface{}) (n int,err error) 從標(biāo)準(zhǔn)輸入掃描文本,根據(jù)format 參數(shù)設(shè)定的格式將成功讀取到空白分隔的值保存到傳遞給本函數(shù)的參數(shù),返回成功掃描的個(gè)數(shù)和遇到的錯(cuò)誤;
案例: // 從控制臺(tái)獲取三個(gè)數(shù),計(jì)算三個(gè)數(shù)之和 package mainimport "fmt"func main(){var a,b,c intfmt.Print("please input the first number:")fmt.Scanln(&a) // 結(jié)束輸入回車即可fmt.Print("please input the second number:")fmt.Scanln(&b)fmt.Print("please input the third number:")fmt.Scanln(&c)fmt.Printf("a=%d\tb=%d\tc=%d\tcount=%d",a,b,c,a+b+c) } package main import "fmt" func main(){var a,b,c intfmt.Print("please input first second third number: ")fmt.Scanf("%d %d %d",&a,&b,&c)fmt.Printf("a=%d\tb=%d\tc=%d\tcount=%d",a,b,c,a+b+c) }
##### 進(jìn)制
對(duì)于一個(gè)整數(shù), 有四種表示方式:
1. 二進(jìn)制:0,1,在Go中不能直接使用二進(jìn)制表示一個(gè)整數(shù)
2. 十進(jìn)制:0-9
3. 八進(jìn)制:0-7,以數(shù)字0開頭表示
4. 十六進(jìn)制: 0-9,A-F,以0x或0X開頭表示; package mainimport "fmt"func main(){var a int = 10// 以二進(jìn)制輸出fmt.Printf("%b\n",a)// 八進(jìn)制表示var b int = 020fmt.Println(b) //16// 十六進(jìn)制表示var c int = 0x1Afmt.Println(c) }
---
*** 茫茫的人海里 又是誰 靜靜數(shù)黃昏 ***---
##### 進(jìn)制轉(zhuǎn)換
1. 二進(jìn)制轉(zhuǎn)十進(jìn)制
從最低位開始(最右邊),將每位上的數(shù)提取出來,乘以2的(位數(shù)-1)次方然后求和:
如: 1001 = 1\*2^3 + 0\*2^2 + 0\*2^1 + 1\*2^0 = 9
2. 八進(jìn)制轉(zhuǎn)十進(jìn)制
從最低位開始(最右邊),將每位上的數(shù)提取出來,乘以8的(位數(shù)-1)次方然后求和:
如: 0223 = 2\*8^2 + 2\*8^1 + 3 *8^0 = 128 + 16 + 3 = 147
3. 十六進(jìn)制轉(zhuǎn)十進(jìn)制
從最低位開始(最右邊),將每位上的數(shù)提取出來,乘以16的(位數(shù)-1)次方然后求和:
如: 0x2A = 2\*16^1 + 10\*16^0 = 32 + 10 = 42
4. 十進(jìn)制轉(zhuǎn)二進(jìn)制
將數(shù)字不斷除以2,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的二進(jìn)制
如: 23 轉(zhuǎn)換成二進(jìn)制
23 / 2 = 11 余 1
11 / 2 = 5 余 1
5 / 2 = 2 余 1
2 / 2 = 1 余 0
1 / 2 = 0 余 1
則23 轉(zhuǎn)換成二進(jìn)制 = 10111
5. 十進(jìn)制轉(zhuǎn)八進(jìn)制
將數(shù)字不斷除以8,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的八進(jìn)制
如: 23 轉(zhuǎn)換成八進(jìn)制
23 / 8 = 2 余 7
2 / 8 = 0 余 2
則23 轉(zhuǎn)換成八進(jìn)制 = 027
6. 十進(jìn)制轉(zhuǎn)十六進(jìn)制
將數(shù)字不斷除以16,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的十六進(jìn)制
如: 123 轉(zhuǎn)換成十六進(jìn)制
123 / 16 = 7 余 11
7 / 16 = 0 余 7
則23 轉(zhuǎn)換成十六進(jìn)制 = 0x7b
7. 二進(jìn)制轉(zhuǎn)八進(jìn)制
將二進(jìn)制數(shù)每三位一組(從低位開始組合),轉(zhuǎn)成對(duì)應(yīng)的八進(jìn)制數(shù)即可
如: 10110111 轉(zhuǎn)換成八進(jìn)制
010 110 111 = 267
8. 二進(jìn)制轉(zhuǎn)十六進(jìn)制
將二進(jìn)制數(shù)每四位一組(從低位開始組合),轉(zhuǎn)成對(duì)應(yīng)的十六進(jìn)制數(shù)據(jù)即可
如: 10110111 轉(zhuǎn)換成十六進(jìn)制
1011 0111 = 0xb7
9. 八進(jìn)制轉(zhuǎn)二進(jìn)制
將八進(jìn)制數(shù)每一位轉(zhuǎn)成對(duì)應(yīng)的一個(gè)3位的二進(jìn)制數(shù)即可
如: 012 = 001 010
10.十六進(jìn)制轉(zhuǎn)二進(jìn)制
將十六進(jìn)制每一位轉(zhuǎn)成對(duì)應(yīng)的一個(gè)4位的二進(jìn)制數(shù)即可
如:0xc81 = 1100 1000 0001
##### 位運(yùn)算
在進(jìn)行位運(yùn)算學(xué)習(xí)前先來了解一下什么是原碼,反碼,補(bǔ)碼;
1. 對(duì)于有符號(hào)的而言: 二進(jìn)制最高位是符號(hào)位: 0 為正數(shù),1為負(fù)數(shù)
1 --> [0000 0001]
-1 --> [1000 0001] // 二進(jìn)制最高位是符號(hào)位,
2. 正數(shù)的原碼,反碼,補(bǔ)碼都一樣;
3. 負(fù)數(shù)的反碼=它的符號(hào)位不變,其它位置取反
-1 -->原碼[1000 0001] 反碼[1111 1110] 補(bǔ)碼[1111 1111]
4. 負(fù)數(shù)的補(bǔ)碼=它的反碼加1
5. 0 的反碼,補(bǔ)碼都是0
6. 計(jì)算機(jī)在運(yùn)算的時(shí)候都是以補(bǔ)碼的方式來運(yùn)算的;
如: -1 + 3
-1 的補(bǔ)碼: [1111 1111]
3 的補(bǔ)碼: [0000 0011]
結(jié)果的補(bǔ)碼: [0000 0010]-->反碼[0000 0010] --> 原碼[0000 0010] = 2
##### 位運(yùn)算符和移位運(yùn)算符
&: 按位與 兩位全為1, 結(jié)果為1,否則為0
|: 按位或 兩位全為0,結(jié)果為0 ,否則為1
^: 按位異或 兩位一個(gè)為0,一個(gè)為1,結(jié)果為1,否則為0
package mainimport "fmt"func main() {var a int = 10var b int = -2// -2 的原碼: [1000 0010]// -2 的反碼: [1111 1101] 符號(hào)位不變,其它位取反// -2 的補(bǔ)碼: [1111 1110] 反碼+1// 10 的補(bǔ)碼: [0000 1010]// 結(jié)果的補(bǔ)碼: [0000 1010]--> 原碼[0000 1010] = 10fmt.Println(a&b) // 10// 結(jié)果的補(bǔ)碼: [1111 1110] --> 反碼[1111 1101] --> 原碼[1000 0010] = -2fmt.Println(a|b) // -2// 結(jié)果的補(bǔ)碼: [1111 0100] --> 反碼[1111 0011] --> 原碼[1000 1100] = -12fmt.Println(a^b)// -12}
移位運(yùn)算符
<< , >> 左移,右移
規(guī)則:
">>" 右移運(yùn)算, 低位溢出,符號(hào)位不變,并用符號(hào)位補(bǔ)溢出的高位
"<<" 左移運(yùn)算, 符號(hào)位不變,低位補(bǔ)0
package mainimport "fmt"func main() {var a int = 10// 10 的補(bǔ)碼: [0000 1010] --> 右移3位的補(bǔ)碼: [0000 0001] = 1fmt.Println(a>>3) // 1// 10 的補(bǔ)碼: [0000 1010] --> 左移3位的補(bǔ)碼: [0101 0000] = 80fmt.Println(a<<3) // 80var b int = -2// -2 的原碼: [1000 0010] --> 反碼[1111 1101] --> 補(bǔ)碼[1111 1110] --> 右移3 位的補(bǔ)碼[1111 1111]// 結(jié)果的反碼: [1111 1110] --> 原碼[1000 0001] = -1fmt.Println(b>>3) // -1// -2 的原碼: [1000 0010] --> 反碼[1111 1101] --> 補(bǔ)碼[1111 1110] --> 左移3 位的補(bǔ)碼[1111 0000]// 結(jié)果的反碼: [1110 1111] --> 原碼[1001 0000] = -16fmt.Println(b<<3) // -16}
以上進(jìn)制部分是基礎(chǔ)的計(jì)算機(jī)知識(shí), 并非Go 語(yǔ)言特有, 還是很有必要學(xué)習(xí)一下的, 加油!
個(gè)人微信公眾號(hào): "開胃咸菜", 在同步更新, 微信公眾號(hào)文章為最新,歡迎大家搜索關(guān)注,一同交流學(xué)習(xí),謝謝
轉(zhuǎn)載于:https://www.cnblogs.com/Mail-maomao/p/11376155.html
總結(jié)
以上是生活随笔為你收集整理的Go 获取键盘输入,进制转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 反射,Expression Tree,I
- 下一篇: Go 流程控制