• 格式化说明

    • %d 格式化整数

    • %x%X 格式化16进制数

      var c int16 = 10
      fmt.Printf("c=%x,c=%X", c, c)

      image-20230302161936141

    • %g 格式化浮点数

      %f 输出浮点数

      %e 输出科学计数法

      func main() {
          var f = 12345.67891
          fmt.Printf("f=%g,f=%f,f=%e", f, f, f)
      }
      // f=12345.67891,f=12345.678910,f=1.234568e+04
    • %0nd 用于规定输出长度为 n 的整数

      长度超过不处理,长度不够就在左边加0

      其中d可选,使用b等也可行

      func main() {
          var a = 99999
          fmt.Printf("a=%03d,a=%08d", a, a)
      }
      
      // a=99999,a=00099999
    • %b 格式化输出位标识符

      func test() {
          var a = 8
          fmt.Printf("a=%b", a)
      }
      
      // a=1000
  • 位运算

    • 按位与&

      func test2() {
         var a1 = 1 & 1
         var a2 = 1 & 0
         var a3 = 0 & 0
         var a4 = 26 & 11
         fmt.Printf("a1=%d,a2=%d,a3=%d,a4=%d", a1, a2, a3, a4)
      }
      
      // a1=1,a2=0,a3=0,a4=10

      image-20230302164128112

    • 按位或|

      func test3() {
          var b1 = 1 | 1
          var b2 = 1 | 0
          var b3 = 0 | 0
          var b4 = 26 | 10
          fmt.Printf("b1=%d,b2=%d,b3=%d,b4=%d", b1, b2, b3, b4)
      }
      
      // b1=1,b2=1,b3=0,b4=26
    • 按位异或^

      func test4() {
         var a1 = 1 ^ 1
         var a2 = 1 ^ 0
         var a3 = 0 ^ 0
         var a4 = 26 ^ 11
         fmt.Printf("a1=%d,a2=%d,a3=%d,a4=%d", a1, a2, a3, a4)
      }
      // a1=0,a2=1,a3=0,a4=17
    • 位清除&^

      // a1=0,a2=1,a3=0,a4=0,a5=20
      func test5() {
         var a1 = 1 &^ 1
         var a2 = 1 &^ 0
         var a3 = 0 &^ 1
         var a4 = 0 &^ 0
         var a5 = 30 &^ 11
         fmt.Printf("a1=%d,a2=%d,a3=%d,a4=%d,a5=%d", a1, a2, a3, a4, a5)
      }

      image-20230302165700327

    • 按位补足^

      该运算符与异或运算符一同使用,即 m^x,对于无符号 x 使用 “全部位设置为 1” 的规则,对于有符号 x 时使用 m=-1

      正数中,数值相等的有符号和无符号相减的绝对值等于无符号最大值+1

      // a=245,b=-11,c=65525,d=-11
      func test6() {
          var a uint8 = 10
          var b int8 = 10
          var c uint16 = 10
          var d int16 = 10
          fmt.Printf("a=%d,b=%d,c=%d,d=%d", ^a, ^b, ^c, ^d)
      }

      参考地址:go中异或运算带来的疑惑

      快照备份

    • 位左移<<

      // a<<2=40,b<<3=56
      func test7() {
          var a = 10
          var b = 7
          fmt.Printf("a<<2=%d,b<<3=%d", a<<2, b<<3)
      }
    • 位右移>>

      // a>>2=3,a>>3=1
      func test8() {
          var a = 15
          fmt.Printf("a>>2=%d,a>>3=%d", a>>2, a>>3)
      }
  • 运算符

    带有 ++-- 的只能作为语句,而非表达式,因此 n = i++ 这种写法是无效的,其它像 f(i++) 或者 a[i]=b[i++] 这些可以用于 C、C++ 和 Java 中的写法在 Go 中也是不允许的。

    func test9() {
      var index=0
      var arr[10] int
      arr[0]=0
      index++
      var a=index++
      arr[index++]=1
      fmt.Printf("a=%d,index=%d,arr[0]=%d",a,index,arr[0])
    }

    会发生报错

    image-20230302174116181