Go常量和变量相关QA

Go常量和变量相关:

  1. 下列代码的输出是:
         func main() {
             const (
                 a, b = "golang", 100
                 d, e
                 f bool = true
                 g
             )
             fmt.Println(d, e, g)
         }
         
         # 输出: golang 100 true
    
    • 在同一个const group中,如果常量定义和前一行一致,那么省略类型和值
  1. 下列代码的输出是:
         func main() {
             const N = 100
             var x int = N
    
             const M int32 = 100
             var y int = M
             fmt.Println(x, y)
         }
         # 输出: 编译失败:cannot use M (type int32) as type int in assignment
    
    • 常量分为 有类型常量无类型常量
    • 无类型常量在赋值给其他变量时,如果字面量可以转换为对应类型变量,那么则赋值成功
    • 有类型常量在赋值给其他变量时,则需要类型匹配
  1. 下列代码的输出是:
         func main() {
             var a int8 = -1
             var b int8 = -128 / a
             fmt.Println(b)
         }
         # 输出: -128
    
    • int8 能表示的数字的范围是 [-2^7, 2^7-1],即 [-128, 127]。
    • -128 是无类型常量,转换为 int8,再除以变量 -1,结果为 128,常量除以变量,结果是一个变量。
    • 变量转换时允许溢出,符号位变为1,转为补码后恰好等于 -128。
  1. 下列代码的输出是:
         func main() {
             const a int8 = -1
             var b int8 = -128 / a
             fmt.Println(b)
         }
         # 编译失败:constant 128 overflows int8
    
    • -128 和 a 都是常量,在编译时求值,-128 / a = 128,两个常量相除,结果也是一个常量,常量类型转换时不允许溢出,因而编译失败。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Go语言数据类型 Go语言本质是用C语言编写的一套高级开发语言, 所以Go语言中的数据类型大部分都是由C语言演变而...
    极客江南阅读 4,453评论 0 6
  • package main import ( "fmt" "io/ioutil" "math" "math/cmpl...
    无风起个浪阅读 1,449评论 0 0
  • 一、Go基础 标识符: go语言中的标识符由字母数字和下划线(_)组成,并且只能以字母和下划线(_)开头 关键字:...
    紅领巾阅读 4,446评论 0 0
  • //GO基本语法介绍 package main // 声明main包 import( // 导入...
    涛焘阅读 4,733评论 0 0
  • 一、基础 1.变量 强类型语言 声明单个变量Go语言在声明变量时,自动对变量对应的内存进行初始化操作,不同于C语言...
    MrKan阅读 1,059评论 0 0