004.golang 常量与运算符

常量的定义

  • 常量的值在编译时就已经确定
  • 常量的定义格式与变量基本相同
  • 等号右侧必须是常量或者常量表达式
  • 常量表达式中的函数必须是内置函数
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++
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值