zoukankan      html  css  js  c++  java
  • cafebabe go入门练习003:常量与iota

    知识点

    常量的值在编译时就已知,常量的底层类型是基本类型boolean,string或number。

    常量定义格式:

    const (
        e = 2.71828182845904523536028747135266249775724709369995957496696763
        pi = 3.14159265358979323846264338327950288419716939937510582097494459
    )
    

    常量定义还可以用常量生成器iota,在每个常量声明时,iota从0开始,逐一增长。

    如定义星期常量:

    type Weekday int
    const (
        Sunday Weekday = iota
        Monday
        Tuesday
        Wednesday
        Thursday
        Friday
        Saturday
    )
    

    使用iota结合位运算原理的例子:

    package main
    
    import "fmt"
    
    //Flags 表示当前网络状态
    type Flags uint
    
    const (
    	// FlagUp 是否开启
    	FlagUp Flags = 1 << iota
    	// FlagBroadcast 是否支持广播
    	FlagBroadcast
    	//FlagLoopback 是否支持本地环回
    	FlagLoopback
    	//FlagPointToPoint 是否支持点对点网络
    	FlagPointToPoint
    	//FlagMulticast 是否支持多播
    	FlagMulticast
    )
    
    //IsUp 判断是否启用网络
    func IsUp(v Flags) bool { return v&FlagUp == FlagUp }
    
    //TurnDown 关闭网络
    func TurnDown(v *Flags) { *v &^= FlagUp }
    
    //SetBroadcast 设置为广播
    func SetBroadcast(v *Flags) { *v |= FlagBroadcast }
    
    //IsCast 判断是否为多播
    func IsCast(v Flags) bool { return v&(FlagBroadcast|FlagMulticast) != 0 }
    
    func main() {
    	var v Flags = FlagMulticast | FlagUp
    	fmt.Printf("%b %t
    ", v, IsUp(v)) // "10001 true"
    	TurnDown(&v)
    	fmt.Printf("%b %t
    ", v, IsUp(v)) // "10000 false"
    	SetBroadcast(&v)
    	fmt.Printf("%b %t
    ", v, IsUp(v))   // "10010 false"
    	fmt.Printf("%b %t
    ", v, IsCast(v)) // "10010 true
    }
    
  • 相关阅读:
    P2422 良好的感觉
    拉格朗日插值
    C# 中的委托和事件(详解)
    异步委托
    ManualResetEvent详解
    快速理解C#高级概念事件与委托的区别
    拉格朗日多项式
    oracle 插入一个从别处查询获得字段的值
    decode和nvl的用法
    C#将像素值转换为图片
  • 原文地址:https://www.cnblogs.com/teacherma/p/13856691.html
Copyright © 2011-2022 走看看