zoukankan      html  css  js  c++  java
  • Go常量与运算符

    常量的定义

    • 常量的值在编译时就已经确定
    • 常量的定义格式与变量基本相同
    • 等号右侧必须是常量或者常量表达式
    • 常量表达式中的函数必须是内置函数
    package main
    
    import (
    	"fmt"
    )
    
    const a int = 1
    const b = 'A'
    
    const (
    	c = a
    	d = a + 1
    	e = a + 2
    )
    
    func main() {
    	fmt.Println(a, b, c, d, e)
    
    }
    

    常量的初始化规则与枚举

    • 在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
    • 使用相同的表达式不代表具有相同的值
    package main
    
    import (
    	"fmt"
    )
    
    const (
    	a = "123"
    	b = len(a)
    	c
    )
    
    func main() {
    	fmt.Println(a, b, c)
    }
    //可以看到b和c打印的结果都为3
    package main
    
    import (
    	"fmt"
    )
    
    const (
    	a, b = 1, "20"
    	c, d
    )
    
    func main() {
    	fmt.Println(a, b, c, d)
    }
    //可以看到a和c为1, b和d为20,这里需要注意的是如果你想要使用常量初始化规则的话,每一行的常量的个数必须是一致的~
    
    • itoa是常量的计数器,从0开始,组中每定义1个常量自动递增1
    • 通过初始化规则与iota可以达到枚举效果
    • 每遇到一个const关键字,iota就会重置为0
    package main
    
    import (
    	"fmt"
    )
    
    const (
    	a = "A"
    	b
    	c = iota
    	d //d的值为3
    )
    const (
    	e = iota
    	f
    	//e的值为0,f的值为1
    )
    
    func main() {
    	fmt.Println(a, b, c, d, e)
    }
    
    package main
    
    import (
    	"fmt"
    )
    
    const (
    	a = "A"
    	b
    	c = iota
    	d //d的值为3
    )
    const (
    	e = iota
    	f
    	//e的值为0,f的值为1
    )
    
    //星期枚举
    const (
    	//第一个常量不可省略表达式
    	Sunday = iota
    	Monday
    	Tuesday
    	Wednesday
    	Thursday
    	Friday
    	Saturday
    )
    
    func main() {
    	fmt.Println(a, b, c, d, e)
    	fmt.Println(Sunday)
    	fmt.Println(Monday)
    	fmt.Println(Tuesday)
    	fmt.Println(Wednesday)
    	fmt.Println(Thursday)
    	fmt.Println(Friday)
    	fmt.Println(Saturday)
    }
    
    

    运算符

    • go中的运算符均是从左至右结合
    • 优先级
    ^      !                                               (一元运算符)
    *       /    %    <<    >>    &      &^
    +      -     |      ^                                (二元运算符)
    ==   !=   <    <=    >=    >
    <-                                              (专门用于channel)
    &&
    ||
    
    package main
    
    import (
    	"fmt"
    )
    
    /*
    6:二进制表示 0110
    11:二进制表示 1011
    ---------
    & 和运算符 0010  2
    | 或运算符 1111  15
    ^ 两位只有一个是1的时候可以表示为1  1101  13
    &^ 如果第二个数当中的这一位是1的话,就要把第二个数当中改为0   0100  4
    */
    
    func main() {
    	fmt.Println(^2)
    	fmt.Println(!true)   //取反
    	fmt.Println(1 << 10) //向左移10位,是二进制的移动
    	fmt.Println(6 & 11)
    	fmt.Println(6 | 11)
    	fmt.Println(6 ^ 11)
    	fmt.Println(6 &^ 11)
    	a := 1
    	if a > 0 && (10/a) > 1 { //跟sehll中的&&类似
    		fmt.Println("OK")
    	}
    
    }
    
    
  • 相关阅读:
    设计模式之工厂模式 练习
    c++智能指针(1)
    记录下 UTF6 GBK 转换函数
    ip白名单 通过* ? 检测IP匹配 轻量级
    stl学习记录(2)
    boost 学习(1)
    stl string 小练习
    stl string 使用指定的分隔符分割成数个子字符串
    [open source] skinbuilder发布
    Builder模式实例分析(C语言版)
  • 原文地址:https://www.cnblogs.com/skymyyang/p/7594915.html
Copyright © 2011-2022 走看看