【GO】05_Go运算符&输入语句&进制转换

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 【GO】05_Go运算符&输入语句&进制转换,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

运算

算术运算符

算术运算符是对数值类型的变量进行运算,比如:加减乘除。

在这里插入图片描述

package main

import "fmt"

func main() {
	//除法:如果运算数都是整数,那么除后去掉小数部分,保留整数部分
	var n4 float32 = -10 / 4
	fmt.Println("除法:", n4)

	//除法:如果需要保留小数部分,则需要有浮点数参与运算
	var n5 float32 = 10.0 / 4
	fmt.Println("除法:", n5)

	//余数(%):a % b = a - (a / b) * b
	fmt.Println("10 % 3 =", 10%3)     //=10-10/3*3=1
	fmt.Println("-10 % 3 =", -10%3)   //=-10-(-10)/3*3=-1
	fmt.Println("10 % -3 =", 10%-3)   //=10-10/(-3)*3=1
	fmt.Println("-10 % -3 =", -10%-3) //=-10-(-10)/(-3)*(-3)=-1

	//++和--使用
	var i int = 10
	i++ //i = i + 1
	fmt.Println("自增:", i)
	i-- //i = i - 1
	fmt.Println("自减:", i)
}

注意事项

  • 对于除号“/”,它的整数除和小数除是有区别的,整数之间做除法时,只保留整数部分而舍弃小数部分。例如,x := 19/5,结果是3

  • 当对一个数取模时,可以等价于a%b=a-a/b*b,这也是取模的本子运算

  • Golang自增自减只能当做一个独立语言使用,不能这样使用

    在这里插入图片描述

  • Golang的++和- -只能写在变量的后面,不能写在变量的前面,即:只有a++和a- -,不能有++a和- -a

  • Golang设计者去掉c和java中的自增、自减的容易混淆写法,让Golang更加简洁统一

比较运算符(关系运算符)

关系运算符又称为比较运算符,其运算结果都是bool型,要么是true,要么是false。关系表达式经常出现在if结构的条件中,或循环结构for的条件中。

在这里插入图片描述

注意事项

  • 关系运算符的结果都是bool型,也就是要么是true,要么是false
  • 关系运算组成的表达式,称为关系表达式:a>b
  • 比较运算符“==”不能误写成“=”

逻辑运算符

逻辑运算用于连接多个条件,通常是关系表达式,最终结果是一个bool值。与或非

在这里插入图片描述

注意事项

  • &&又叫短路与:如果第一个条件为False,则第二个条件不会判断,最终结果为False
  • ||又叫短路或:如果第一个条件为True,则第二个条件不会判断,最终结果为True

赋值运算符

赋值运算就是将某个运算后的值,赋值给指定的变量。<<=>>=…这些移位运算是在二进制后使用的。

在这里插入图片描述

a,b在没有中间变量的情况下,实现值互换

package main

import "fmt"

func main() {
	a := 10
	b := 20
	a += b
	b = a - b //b = a + b - b ? b = a
	a = a - b //b = a + b - a
	fmt.Println(a, b)
}

运算优先级

运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如下图所示,上一行运算符中优先于下一行。**只有单目运算符、赋值运算符是从右向左运算的。**优先级大概如下:

在这里插入图片描述

位运算符

  • 按位与运算 &:两位同时为1,结果为1,否则为0

  • 按位或运算 |:两位有一个为1,结果为1,否则为0

  • 按位异或运算 ^:两位一个为0,一个为1,结果为1,否则为0

    package main
    
    import "fmt"
    
    func main() {
    	fmt.Println(2 & 3) // 2的补码:0000 0010;3的补码:0000 0011  【同1为1,否则为0】=》 0000 0010  =》 2
    	fmt.Println(2 | 3) // 2的补码:0000 0010;3的补码:0000 0011  【一个为1,结果为1】=》 0000 0011  =》 3
    	fmt.Println(2 ^ 3) // 2的补码:0000 0010;3的补码:0000 0011  【两者不同为1,否者为0】=》 0000 0001  =》 1
    	fmt.Println(-2 ^ 2)
    	/*
    		-2的原码:1000 0010;-2的反码:1111 1101;
    		-2的补码:1111 1110;
    		2的补码:0000 0010
    		两者不同为1,否者为0
    		1111 1100(补码)  =》 1111 1011(反码) =》 1000 0100(原码) =》-4
    	*/
    }
    
  • 右移运算符 >>:低位溢出,符号位不变,并用符号位补溢出的高位

    a := 1 >> 2 //0000 0001 => 0000 0000 = 0

  • 左移运算符 <<:符号位不变,低位补0

    c := 1 << 2 //0000 0001 => 0000 0100 = 4

    在这里插入图片描述

其他运算符(&,*)

在这里插入图片描述

package main

import "fmt"

func main() {
	num := 10
	fmt.Println("num的地址=", &num) //num的地址= 0xc00010c008
	var ptr *int = &num
	fmt.Println("ptr的地址=", &ptr)  //ptr的地址= 0xc0000a4020
	fmt.Println("ptr指向的值=", *ptr) //ptr指向的值= 10
}

输入语句

在编程中,需要接收用户输入的数据,可以使用键盘输入语句来获取。fmt.Scanln() 或者 fmt.Scanf()

在这里插入图片描述
在这里插入图片描述

package main

import "fmt"

func main() {
	//从控制台接收用户信息,包括:姓名、年龄、薪水、是否通过GO课程考试
	var name string
	var age byte
	var money float32
	var isPass bool

	//输入
	fmt.Println("请输入姓名:")
	fmt.Scanln(&name)
	fmt.Println("请输入年龄:")
	fmt.Scanln(&age)
	fmt.Println("请输入薪水:")
	fmt.Scanln(&money)
	fmt.Println("请输入是否通过GO语言课程:")
	fmt.Scanln(&isPass)

	fmt.Printf("名字:%v  年龄:%v  薪水:%v  考试%v\n", name, age, money, isPass)
	//输入空格间隔
	fmt.Println("请输入姓名, 年龄, 薪水, 是否通过考试")
	fmt.Scanf("%s %d %f %t", &name, &age, &money, &isPass)
	fmt.Printf("名字:%v  年龄:%v  薪水:%v  考试%v\n", name, age, money, isPass)
}

在这里插入图片描述

进制转换

  • 进制的表示

    • 二进制

      0和1,满2进1。在Golang中,不能直接使用二进制来表示一个整数,它沿用了C语言的特点

      var i int = 10
      fmt.Printf("%b \n", i) //1010
      
    • 十进制

      0到9,满10进1

    • 八进制

      0到7,满8进1,以数字0开头

      //八进制:0-7, 满8进1,以数字0开头
      var j int = 021       //对应十进制2*8^1+1*8^0=17
      fmt.Println("j =", j) //j = 17
      
    • 十六进制

      0-9和A-F,满16进1,以0x或0X开头,此处的A-F不区分大小写

      //十六进制:0-9及A-F,满16进1,以0x或0X开头
      var k int = 0x11 //对应十进制1*16^1+1*16^0=17
      fmt.Println("k =", k) //k = 17
      
  • 其他进制转十进制

    规则

    • 从低位开始(右边的),将每个位上的数提取出来,乘以N的(位数-1)次方,然后求和

    1011 = 1 * 20 + 1 * 21 + 0 * 22 + 1 * 23 = 1 + 2 + 0 + 8 = 11
    0123 = 3 * 80 + 2 * 81 + 1 * 82 = 3 + 16 + 64 = 83
    0x34A = 10 * 160 + 4 * 161 + 3 * 162 = 10 + 64 + 768 = 842

  • 十进制转其他进制

    规则

    • 将该数不断除以N,直到商为0为止,然后将每步得到的余数倒过来,就是对应的N进制
    • 举例- – -十进制转二进制:
      在这里插入图片描述
  • 二进制转其他进制

    二进制转八进制

    • 规则:将二进制数每三位一组(从低位开始组合),转成对应的八进制数即可。
    • 案例:将二进制11010101转成八进制

      11,010,101=0325 // 101 – – ->5; 010 – – ->2; 011 – – ->3

    二进制转十六进制

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

      1101,0101=0xD5 // 0101 – – ->5; 1101 – – -> D

  • 其他进制转二进制

    八进制转二进制

    • 规则:将八进制数每1位转成对应的一个3位的二进制数即可。
    • 案例:将八进制0237转成二进制

      0237=10,011,111 // 2 – – -> 010; 3 – – -> 011; 7 – – ->111

    十六进制转二进制

    • 规则:将十六进制数每1位转成对应的一个4位的二进制数即可。
    • 案例:将十六进制0x237转成二进制

      0x237=10,0011,0111 // 2 – – ->0010; 3 – – -> 0011; 7 – – -> 0111

  • 原码、反码、补码

    二进制(Binary)是逢2进位的进位制,0、1是基本运算符。现代电子计算机技术采用的是二进制,因为它只使用0和1两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制来表示的。

    在计算机内部,运行各种运算都是以二进制的方式来运行。

    • 二进制的首位是符号位:0表示正数、1表示负数

      1 => 【0000 0001】
      -1 =>【1000 0001】

    • 正数的源码、反码、补码都是一样的

      1 => 原码 【0000 0001】反码【0000 0001】补码【0000 0001】

    • 负数的反码:它的原码符号位不变,其它位取反(0->1、1->0)

      -1 => 原码【1000 0001】反码【1111 1110】

    • 负数的补码=它的反码+1

      -1 => 补码【1111 1111】
      0的反码,补码都是0

    • 在计算机运行的时候,都是以补码的方式来运算的

      1+1;1-1=1+(-1)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/143956.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!