• 1.1. 对于整数,有四种表示方式:

1) 二进制。 在 golang 中,不能直接使用二进制来表示一个整数,它沿用了 c 的特点。

    fmt.Printf("%b ",num1)//101

2) 十进制:0-9 ,满 10 进 1。

3) 八进制:0-7 ,满 8 进 1, 以数字 0 开头表示一个8进制数

    //以0开始表示8进制
    var num2 int = 070
    fmt.Println("num2=",num2)//num2= 56

4) 十六进制:0-9 及 A-F,满 16 进 1, 以 0x 或 0X 开头表示此处的 A-F 不区分大小写

//以0x开始表示16进制,x不区分大小写
    var num3  = 0x8f0
    fmt.Println("num3=",num3)//num3= 2288
  • 1.2. 源码、反码、补码。

计算机只能运算加法,在进行减法运算的时候把减法当做加法处理。都是以补码的形式计算。一个数的补码计算方式如下:

  • 1.3. 位运算

3个位运算(按位与&、按位或|、按位异或^),它们的运算规则是:

按位与& :两位全为1,结果为 1,否则为 0

按位或|:两位有一个为 1,结果为 1,否则为 0

按位异或 ^:两位一个为 0,一个为 1,结果为 1,否则为 0

如下例子:先计算2的补码、3的补码。在进行位运算。运算结果是补码,再转回源码。

func main() {
    /**
    2的补码 0000 0010
    3的补码 0000 0011
    2&3补码    0000 0010 = 2 因为正数补码和源码一样。结果就是2
    2|3补码    0000 0011 = 3 因为正数补码和源码一样。结果就是3
    2^3补码   0000 0001 = 1 因为正数补码和源码一样。结果就是1
     */
    fmt.Println(2&3)
    fmt.Println(2|3)
    fmt.Println(2^3)
}

当有负数参与运算时就很麻烦。比如:-2^2 需要把计算-2的补码、2的补码---》然后进行异或运算---》计算的结果是补码,再转回源码。得到最终结果。如下所示:

  • 1.4. 移位运算。

Golang 中有 2 个移位运算符:>>右移和左移<< ,运算规则:

右移运算符 >>:低位溢出,符号位不变,并用符号位补溢出的高位。

左移运算符 <<:符号位不变,低位补 0。

func main() {
    a := 1 >> 2    // 0000 0001 =>0000 0000 = 0
    c := 1 << 2    // 0000 0001 ==> 0000 0100 => 4
    fmt.Println("a=", a)
    fmt.Println("c=", c)
}

results matching ""

    No results matching ""