运算符

1. 运算符

算数运算符

关系运算符

逻辑运算符

if !true {
    fmt.Println("你是风儿我是沙,去你吗的风河沙")
}

位运算符

必知必会概念:

  • 计算机中的 存储、运算、网络传输等任何的行为,本质上都是二进制的操作。例如:01010101。

      A                                  B
    hello   -> 0101010010101  ->    hello
    
  • 信息表现形式

    二进制表示:0101010010101   ->  hello
    十进制表示:1921            ->  hello
    
  • 十进制和二进制的转换关系

    | 十进制 | 二进制 | | --- | ---- | | 0 | 0 | | 1 | 1 | | 2 | 10 | | 3 | 11 | | 4 | 100 | | 5 | 101 | | 6 | 110 | | 7 | 111 | | 8 | 1000 | | 9 | 1001 | | 10 | 1010 | | ... | ... |

    • 二进制转换为十进制

      10101         ->   2**4 + 2**2 + 2**0 => 16 + 4 + 1 => 21
      101010010101  ->   2**11 + 2**9 + ....
      
    • 十进制转换成二进制

      99            -> 64 + 32 + 2 + 1  -> 2**6 + 2**5 + 2**1 + 2*0  -> 1100011
      

位运算指的是二进制之间的运算:

// 1.按位进行与运算(全为1,才得1)
r1 := 5 & 99
5  -> 0000101
99 -> 1100011
      0000001   -> 1

// 2.按位进行或运算(只要有1,就得1)
r2 := 5 | 99
5  -> 0000101
99 -> 1100011
      1100111   -> 2**6 + 2**5 + 2**2 + 2**1 + 2**0 = 64 + 32 + 4 + 2 + 1 = 103

// 3.按位进行异或运算(上下不同,就得1)
r3 := 5 ^ 99
5  -> 0000101
99 -> 1100011
      1100110   -> 2**6 + 2**5 + 2**2 + 2**1 = 64 + 32 + 4 + 2 = 102

// 4.按位向左移动
r4 := 5 << 2
        5  -> 101
向左移动2位  -> 10100  -> 2**4 + 2**2 = 16 + 4 = 20

// 5.按位向右移动
r5 := 5 >> 1
        5  -> 101
向右移动1位  -> 10  -> 2**1 = 2

// 6.比较清除   // 以前面的值为基准,让前面的和后面的值的二进制位进行比较,如果两个位置都是1,则讲前面的值的那个位置置0
r6 := 5 &^ 99
5  -> 0000101
99 -> 1100011
      0000100     -> 2**2 = 4

2. 赋值运算符

age := 19
age = 99

age = age + 9  // age+=9
age = age - 9  // age-=9
age = age * 9  // age*=9
...

2.1. 运算符的优先级

Precedence    Operator
    5             *  /  %  <<  >>  &  &^
    4             +  -  |  ^
    3             ==  !=  <  <=  >  >=
    2             &&
    1             ||
v1 := 3 + 2 * 2
v2 := 8 == 5 & 99

注意:不要想办法去记住他,使用括号。

参考地址:

results matching ""

    No results matching ""