前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >004.golang 常量与运算符

004.golang 常量与运算符

作者头像
qubianzhong
发布2018-08-02 14:52:19
3930
发布2018-08-02 14:52:19
举报
文章被收录于专栏:行者常至行者常至

常量的定义

  • 常量的值在编译时就已经确定
  • 常量的定义格式与变量基本相同
  • 等号右侧必须是常量或者常量表达式
  • 常量表达式中的函数必须是内置函数
package main

import "fmt"

const a int = 1
const b = "B"
const (
    c = "c"
    d = len(c)
    e = d * 2
)
const f, g, h, i = 1, true, "h", len("love")

const (
    j, k, l, m = 1, "a", true, float64(len(k)) * 100.123
)

func main() {
    fmt.Println(a, b, c, d, e, f, g, h, i, j, k, l, m)
}

常量的初始化规则与枚举

  • 在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
  • 使用相同的表达式不代表具有相同的值
  • iota是常量的计数器,从0开始,组中每定义1个常量自动递增1
  • 通过初始化规则与iota可以达到枚举的效果
  • 每遇到一个const关键字,iota就会重置为0
package main

import "fmt"

const (
    a = "a"
    b
    c
    d
    e = iota
    f
    g
)
const (
    h = iota
    i
    j
)

func main() {
    fmt.Println(a, b, c, d, e, f, g, h, i, j)
}
package main

import "fmt"

const (
    _          = iota
    KB float64 = 1 << (iota * 10)
    MB
    GB
    TB
    PB
    EB
    ZB
    YB
)

func main() {
    fmt.Println(KB)
    fmt.Println(MB)
    fmt.Println(GB)
    fmt.Println(TB)
    fmt.Println(PB)
    fmt.Println(EB)
    fmt.Println(ZB)
    fmt.Println(YB)
}

运算符

Go中的运算符均是从左至右结合

优先级(从高到低)
^      !                                 (一元运算符)
*       /    %    <<    >>    &      &^
+      -     |      ^                    (二元运算符)
==   !=   <    <=    >=    >
<-                                       (专门用于channel)
&&
||
package main

import "fmt"

/*
 6: 0110
11: 1011
---------
&   0010  只有都是1的时候,才是1
|   1111  只要有一个是1,就是1
^   1101  只有一个是1的时候,才是1
&^  0100  第二个参数为1的,把第一个参数的改为0
*/
func main() {
    /*
    正整数的补码是其二进制表示,与原码相同;
    负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1

    按位取反 0 0010
    取补码   0 0010  
    按位取反 1 1101 这个也是补码,
    减去1    1 1100
    再取反, 1 0011 但符号位不变
    得 -3
    */
    fmt.Println(^2)
    fmt.Println(!true)         //false
    fmt.Println(1 << 10)       //1024
    fmt.Println(1 << 10 >> 10) //1024
    fmt.Println(6 & 11)        //0010
    fmt.Println(6 | 11)        //1111
    fmt.Println(6 ^ 11)        //1101
    fmt.Println(6 &^ 11)       //0100
}

指针

Go虽然保留了指针,但与其它编程语言不同的是,在Go当中不 支持指针运算以及”->”运算符,而直接采用”.”选择符来操作指针 目标对象的成员

  • 操作符”&”取变量地址,使用”*”通过指针间接访问目标对象
  • 默认值为 nil 而非 NULL
package main

import "fmt"

func main() {
    a := 1
    var p *int = &a

    fmt.Println(p)
    fmt.Println(*p)
}

递增递减语句

在Go当中,++ 与 – 是作为语句而并不是作为表达式

a := 1
a++
a--

//这是不允许的,只能作为语句,表达式不可以
//b := a++
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年05月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常量的定义
  • 常量的初始化规则与枚举
  • 运算符
    • Go中的运算符均是从左至右结合
      • 优先级(从高到低)
  • 指针
  • 递增递减语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档