#### Go 获取键盘输入,进制转换

最近爱上<<珂矣的心灵独语>> 连续听一下礼拜也不觉得厌: 喜欢她的宁静与安然,喜欢她的坦荡与欢喜,喜欢她的禅意与智慧;
***撑着一苇江湖,耕烟处, 入时无***
##### 获取键盘输入
func Scanln(a ...interface{})(n int,err error)
在换行时停止扫描,也就是说通过换行来获得输入结束信号
func Scanf(format string, a ...interface{}) (n int,err error)
从标准输入扫描文本,根据format 参数设定的格式将成功读取到空白分隔的值保存到传递给本函数的参数,返回成功扫描的个数和遇到的错误;

  

案例:  
// 从控制台获取三个数,计算三个数之和
package main import "fmt" func main(){
var a,b,c int
fmt.Print("please input the first number:")
fmt.Scanln(&a) // 结束输入回车即可
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 int
fmt.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)
}

  


##### 进制
对于一个整数, 有四种表示方式:
1. 二进制:0,1,在Go中不能直接使用二进制表示一个整数
2. 十进制:0-9
3. 八进制:0-7,以数字0开头表示
4. 十六进制: 0-9,A-F,以0x或0X开头表示;
package main

import "fmt"

func main(){
var a int = 10
// 以二进制输出
fmt.Printf("%b\n",a)
// 八进制表示
var b int = 020
fmt.Println(b) //16
// 十六进制表示
var c int = 0x1A
fmt.Println(c)
}

 ---

*** 茫茫的人海里 又是谁 静静数黄昏 ***
---
##### 进制转换
1. 二进制转十进制
从最低位开始(最右边),将每位上的数提取出来,乘以2的(位数-1)次方然后求和:
如: 1001 = 1\*2^3 + 0\*2^2 + 0\*2^1 + 1\*2^0 = 9
2. 八进制转十进制
从最低位开始(最右边),将每位上的数提取出来,乘以8的(位数-1)次方然后求和:
如: 0223 = 2\*8^2 + 2\*8^1 + 3 *8^0 = 128 + 16 + 3 = 147
3. 十六进制转十进制
从最低位开始(最右边),将每位上的数提取出来,乘以16的(位数-1)次方然后求和:
如: 0x2A = 2\*16^1 + 10\*16^0 = 32 + 10 = 42
4. 十进制转二进制
将数字不断除以2,直到商为0,然后将每步得到的余数倒过来,就是对应的二进制
如: 23 转换成二进制
23 / 2 = 11 余 1
11 / 2 = 5 余 1
5 / 2 = 2 余 1
2 / 2 = 1 余 0
1 / 2 = 0 余 1
则23 转换成二进制 = 10111
5. 十进制转八进制
将数字不断除以8,直到商为0,然后将每步得到的余数倒过来,就是对应的八进制
如: 23 转换成八进制
23 / 8 = 2 余 7
2 / 8 = 0 余 2
则23 转换成八进制 = 027
6. 十进制转十六进制
将数字不断除以16,直到商为0,然后将每步得到的余数倒过来,就是对应的十六进制
如: 123 转换成十六进制
123 / 16 = 7 余 11
7 / 16 = 0 余 7
则23 转换成十六进制 = 0x7b
7. 二进制转八进制
将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可
如: 10110111 转换成八进制
010 110 111 = 267
8. 二进制转十六进制
将二进制数每四位一组(从低位开始组合),转成对应的十六进制数据即可
如: 10110111 转换成十六进制
1011 0111 = 0xb7
9. 八进制转二进制
将八进制数每一位转成对应的一个3位的二进制数即可
如: 012 = 001 010
10.十六进制转二进制
将十六进制每一位转成对应的一个4位的二进制数即可
如:0xc81 = 1100 1000 0001

##### 位运算
在进行位运算学习前先来了解一下什么是原码,反码,补码;
1. 对于有符号的而言: 二进制最高位是符号位: 0 为正数,1为负数
1 --> [0000 0001]
-1 --> [1000 0001] // 二进制最高位是符号位,
2. 正数的原码,反码,补码都一样;
3. 负数的反码=它的符号位不变,其它位置取反
-1 -->原码[1000 0001] 反码[1111 1110] 补码[1111 1111]
4. 负数的补码=它的反码加1
5. 0 的反码,补码都是0
6. 计算机在运算的时候都是以补码的方式来运算的;
如: -1 + 3
-1 的补码: [1111 1111]
3 的补码: [0000 0011]
结果的补码: [0000 0010]-->反码[0000 0010] --> 原码[0000 0010] = 2
##### 位运算符和移位运算符
&: 按位与 两位全为1, 结果为1,否则为0
|: 按位或 两位全为0,结果为0 ,否则为1
^: 按位异或 两位一个为0,一个为1,结果为1,否则为0
 package main

 import "fmt"

 func main() {
var a int = 10
var b int = -2
// -2 的原码: [1000 0010]
// -2 的反码: [1111 1101] 符号位不变,其它位取反
// -2 的补码: [1111 1110] 反码+1
// 10 的补码: [0000 1010]
// 结果的补码: [0000 1010]--> 原码[0000 1010] = 10
fmt.Println(a&b) // 10 // 结果的补码: [1111 1110] --> 反码[1111 1101] --> 原码[1000 0010] = -2
fmt.Println(a|b) // -2 // 结果的补码: [1111 0100] --> 反码[1111 0011] --> 原码[1000 1100] = -12
fmt.Println(a^b)// -12
}

  


移位运算符
<< , >> 左移,右移
规则:
">>" 右移运算, 低位溢出,符号位不变,并用符号位补溢出的高位
"<<" 左移运算, 符号位不变,低位补0
 package main
import "fmt"
func main() {
var a int = 10
// 10 的补码: [0000 1010] --> 右移3位的补码: [0000 0001] = 1
fmt.Println(a>>3) // 1
// 10 的补码: [0000 1010] --> 左移3位的补码: [0101 0000] = 80
fmt.Println(a<<3) // 80
var b int = -2
// -2 的原码: [1000 0010] --> 反码[1111 1101] --> 补码[1111 1110] --> 右移3 位的补码[1111 1111]
// 结果的反码: [1111 1110] --> 原码[1000 0001] = -1
fmt.Println(b>>3) // -1
// -2 的原码: [1000 0010] --> 反码[1111 1101] --> 补码[1111 1110] --> 左移3 位的补码[1111 0000]
// 结果的反码: [1110 1111] --> 原码[1001 0000] = -16
fmt.Println(b<<3) // -16
}

  


以上进制部分是基础的计算机知识, 并非Go 语言特有, 还是很有必要学习一下的, 加油!


个人微信公众号: "开胃咸菜", 在同步更新, 微信公众号文章为最新,欢迎大家搜索关注,一同交流学习,谢谢

Go 获取键盘输入,进制转换的更多相关文章

  1. java se系列(二) 关键字、注释、常量、进制转换、变量、数据类型转换、运算符

    1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2 常见的关键字 备注 ...

  2. 进制转换( C++字符数组 )

    注: 较为简便的方法是用 整型(int)或浮点型(long.double 注意:该类型不一定能够准确存储数据) 来存放待转换的数值,可直接取余得到每一位数值 较为稳定的方法是用 字符数组储存待转换的数 ...

  3. 【轻院热身赛】级数求和、进制转换、candy

    [题目链接:级数求和] Problem A: 级数求和 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 409  Solved: 240 SubmitSt ...

  4. JavaSE教程-03Java中分支语句与四种进制转换

    一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...

  5. Python 进制转换、位运算

    一.进制转换 编程用十进制,十进制转换为二进制.八进制.十六进制 In [135]: bin(23) Out[135]: '0b10111' In [136]: oct(23) Out[136]: ' ...

  6. 19-3-4 Python进制转换;bool str int三者之间的转换;字符串的索引,切片;for循环的使用

    进制转换: 二进制转十进制:  0010 1111 = 1*2**0+1*2**1+1*2**2+1*2**3+1*2**5 十进制转换二进制: 用十进制数除2逆序取余 --->101010 布 ...

  7. 一起talk C栗子吧(第七回:C语言实例--进制转换)

    各位看官们.大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是生成随机数的样例.这一回咱们说的 ...

  8. 【字符串】P2084 进制转换-C++

    题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的数N转换成十进 ...

  9. Day02_IP地址详解&进制转换&DOS基本命令与批处理

    学于千峰教育开源课程 感谢 千峰教育官网 b站在线视频 IP地址详解 一.简单局域网的构成 局域网:一般称为内网 简单局域网的构成:交换机.网线.PC(其他IT终端) 交换机:用来组建内网的局域网的设 ...

随机推荐

  1. windows10下vscode+cmake编译Qt5代码

    概述 本文演示环境: windows10 cmake version:3.18 qt version: 5.14 vscode version: 1.54.1 本文演示环境基于在线模式, 离线使用VS ...

  2. mac OSX使用spdlog1.7

    !!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 注意️ 请选择对c++11支持较为完善的编译器,因为spdlog一直更新.   本机演示环境 ...

  3. 【LeetCode】35. Search Insert Position 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 日期 题目地址:https://leetc ...

  4. 【LeetCode】916. Word Subsets 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/word-sub ...

  5. 【LeetCode】222. Count Complete Tree Nodes 解题报告(Python)

    [LeetCode]222. Count Complete Tree Nodes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个 ...

  6. 洛谷1052——过河(DP+状态压缩)

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  7. Dev C++调用汇编

    参考: https://blog.csdn.net/ljx0305/article/details/5831742 https://www.cnblogs.com/jokerjason/p/95786 ...

  8. rabbitmq集群和镜像队列

    Rabbitmq集群和镜像队列 1引言 1.1编写目的 2 原理和使用 2.1镜像队列原理 2.1.1 原理 默认的一个rabbitmq中的queue是在一个node上的,至于在那个node上取决于c ...

  9. What Makes for Good Views for Contrastive Learning

    目录 概 前 InfoMin Sweet Spot 空间距离 Color Spaces Frequency Separation 构建 novel views 无监督 半监督 Tian Y., Sun ...

  10. Stirling's Formula

    目录 Stirling's Formula Keith Conrad. Stirling's Formula. Stirling's Formula \[\lim_{n \rightarrow \in ...