第五课 go语言基础-计算机进制转换和位运算

tags:

  • golang
  • 2019尚硅谷

categories:

  • golang
  • 键盘输入
  • 二进制
  • 位运算和位移运算

第一节 go语言键盘输入语句

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
步骤:

  1. 导入fmt包
  2. 调用fmt包的fmt. ScanIn()或者fmt. Scanf()
  3. 推荐fmt. ScanIn() 因为Scanf 容易输入错误。
    案例演示:
    要求:可以从控制台接收用户信息,[姓名, 年龄,薪水]。
package main
import "fmt"


func main() {
	//要求: 可以从控制台接收用户信息, [姓名,年龄,薪水,是否通过考试 ]。
	//方式1 fmt.Scanln
	//1先声明需要的变量
	var name string
	var age byte
	var sal float32
	var isPass bool

	// 方式一 : Scanln() 方式输入
	fmt.Println("请输入姓名:")
	// 传递一个name地址, 相当于把输入赋值给name 
	// 当程序执行到Scanln时,程序会等待用户输入,并回车
	fmt.Scanln(&name)

	fmt.Println("请输入年龄:")
	fmt.Scanln(&age)

	fmt.Println("请输入薪水:")
	fmt.Scanln(&sal)

	fmt.Println("请输入是否通过考试:")
	fmt.Scanln(&isPass)

	fmt.Printf("名字是 %v \n 年龄是 %v \n 薪水是 %v \n 是否通过考试 %v \n", name, age, sal, isPass)

	// 方式二 : Scanf() 按照指定的格式输入
	fmt.Println("请输入你的姓名,年龄,薪水,是否通过考试,使用 空格隔开")
	// 具体的占位符可以看第三课中的表格, 需要一一对应
	fmt.Scanf("%s %d %f %t", &name, &age, &sal, &isPass)
	fmt.Printf("名字是 %v \n 年龄是 %v \n 薪水是 %v \n 是否通过考试 %v \n", name, age, sal, isPass)
}

第二节 go语言计算机进制

1. 计算机进制的介绍

对于整数,有四种表示方式:

  1. 二进制: 0,1,满2进1。
    • 在golang中不能使用二进制表示一个整数, 它延用了C语言的特点。
    • 如果要输出二进制:%b
  2. 十进制: 0-9, 满10进1。
  3. 八进制: 0-7,满8进1。以数字0开头表示。
  4. 十六进制: 0-9及A-F,满16进1.以0x或0X开头表示。此处的A-F不区分大小写。如: 0x21AF +1= 0X21B0

2. 其他进制转为十进制

规则:从最低位开始(右边的),将每个位上的数提取出来,乘以2/8/16的(位数-1)次方,然后求和。

3. 十进制转为其他进制

规则:将该数不断除以2/8/16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

4. 二进制转为八进制或十六进制

二级制转为八进制规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可。
二级制转为十六进制规则:将二进制数每四位一组(从低位开始组合),转成对应的八进制数即可。

5. 八进制或十六进制转为二进制

八进制转为二进制规则:将八进制数每1位,转成对应的-一个3位的二进制数即可。
十六进制转为二进制规则:将十六进制数每1位,转成对应的-一个4位的二进制数即可。

第三节 位运算

1. 源码反码和补码

  1. 在计算机的内部,运行各种运算时,都是以二进制的方式来运行。
  2. 对于有符号的而言:
    • 二进制的最高位是符号位: 0表示正数,1表示负数
    • 正数的原码,反码,补码都一样
    • 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)
    • 负数的补码=它的反码+1
    • 0的反码,补码都是0
    • 在计算机运算的时候,都是以补码的方式来运算
  3. 例子:
    • 源码:1 =》[0000 0001] -1 =》[1000 0001]
    • 反码:1 =》[0000 0001] -1 =》[1111 1110]
    • 补码:1 =》[0000 0001] -1 =》[1111 1111]

2.位运算符和移位运算符

Golang中有3个位运算分别是按位与&、按位或|、按位异或^,它们的运算规则是:

  1. 按位与&:两位全为1,结果为1,,否则为0
  2. 按位或|:两位有一个为1,结果为1,否则为0
  3. 按位异或^:两位一个为0,一个为1,结果为1,否则为0
  4. 它们都是以补码的形式进行运算的

Golang中有2个移位运算符: >>、<<右移和左移,运算规则:

  1. 右移运算符>>:低位溢出,符号位不变并用符号位补溢出的高位
  2. 左移运算符<<:符号位不变,低位补0
package main
import "fmt"


func main() {
	// golang 中位运算和位移运算
	fmt.Println(2&3) //2
	fmt.Println(2|3) //3
	fmt.Println(2^3) //1

	fmt.Println(-2&2) //2
	fmt.Println(-2|2)//-2
	fmt.Println(-2^2)//-4

	a := 1 >> 2 //0
	b := -1 >> 2 //-1
	c := 1 << 2 // 4
	d := -1 << 2 //-4
	fmt.Println(a, b, c, d)
 }