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++

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lzj_learn_note

4-字符串

字段宽度是转换后的值保留的最小字符个数,精度是数字转换结果中应该包含的小数位数或字符串转换后的值所能包含的最大字符个数。

9730
来自专栏Java帮帮-微信公众号-技术文章全总结

04-02.总结switch,for,while,do。while跳转语句

(4)do...while循环 A:基本格式 do { 循环体语句; }while(判断条件语句); 扩展格式: 初始化语句; do { 循环体语...

40040
来自专栏数据结构与算法

P1739 表达式括号匹配

题目描述 假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是...

35180
来自专栏行者常至

003.golang 类型与变量

零值并不等于空值,而是当变量被声明为某种类型后的默认值, 通常情况下值类型的默认值为0,bool为false,string为空字符串

9720
来自专栏Pythonista

Golang之面向对象和指针

11940
来自专栏雪胖纸的玩蛇日常

老男孩Python全栈开发(92天全)视频教程 自学笔记06

21460
来自专栏用户2442861的专栏

css选择器中:first-child与:first-of-type的区别

http://www.cnblogs.com/2050/p/3569509.html

10210
来自专栏Golang语言社区

【Go 语言社区】Go 语言范围(Range)

Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素。在数组和切片中它返回元...

352100
来自专栏mySoul

通过css类/选择器选取元素 文档结构和遍历 元素树的文档

尽管如此,js还定义了一个方法,即一个getElementsByClassName(),是基于class属性值中的标识符来选取成组的文档元素

10420
来自专栏GreenLeaves

JavaScript之获取和设置元素属性

1.与我前面的随笔获取元素的那些方法不同http://www.cnblogs.com/GreenLeaves/p/5689075.html 获取元素属性的方法g...

228100

扫码关注云+社区

领取腾讯云代金券