目录

一 运算符

1.1 运算符汇总

算术运算符:    +    -    *    /    %    ++    --    
关系运算符:    ==    !=    <=    >=    <    >    
逻辑运算符:    !    &&    ||
位运算:        &(按位与)    |(按位或)    ^(按位取反)    <<(左移)    >>(右移)
赋值运算符:    =    +=    -=    *=    /=    %=    <<=    >>=    &=    ^=    |=
其他运算符:    &(取地址)    *(取指针值) <-(Go Channel相关运算符)

1.2 自增、自减

Go中只有后--后++,且自增自减不能用于表达式中,只能独立使用:

a = i++           // 错误用法
if i++ > 0 {}     // 错误用法
i++               // 正确用法

1.3 位运算

&     按位与,参与运算的两个数二进制位相与:同时为1,结果为1,否则为0
|     按位或,参与运算的两个数二进制位相或:有一个为1,结果为1,否则为0
^     按位异或:二进位不同,结果为1,否则为0
<<    按位左移:二进位左移若干位,高位丢弃,低位补0,左移n位其实就是乘以2的n次方
>>    按位右移:二进位右移若干位,右移n位其实就是除以2的n次方

二 优先级

三 进制转换

1.1 常见进制

  • 二进制:只有0和1,Go中不能直接使用二进制表示整数

  • 八进制:0-7,以数字0开头

  • 十进制:0-9

  • 十六进制:0-9以及A-F,以0X开头,A-F以及X不区分大小写

1.2 任意进制转换为十进制

二进制转十进制:

从最低位开始,每个位上数乘以2(位数-1)次方然后求和
1011 = 1*20 + 1*21 + 0*22 + 1*23 = 11

八进制转十进制:

从最低位开始,每个位上数乘以8(位数-1)次方然后求和
0123 = 3*80 + 2*81 + 1*82 + 0*83 = 83

其他进制转十进制同理。

1.3 十进制转其他进制

十进制转二进制:

不断除以2,直到0为止,余数倒过来即可,如图计算28转换为二进制11100

十进制转八进制:不断除以8,直到0为止,余数倒过来即可。

十进制转十六进制:不断除以16,直到0为止,余数倒过来即可。

1.4 其他进制互转

  • 二进制转换八进制:将二进制数从低位开始,每三位一组,转换成八进制数即可

  • 二进制转十六进制:将二进制数从低位开始,每四位一组,转换成十六进制数即可

  • 八进制转换二进制:将八进制数每1位转换成一个3位的二进制数(首位0除外)

  • 十六进制转二进制:将十六进制每1位转换成对应的一个4位的二进制数即可

四 计算机运算原理

计算机常见的术语:

  • bit:比特,代表1个二进制位,一个位只能是0或者1

  • Byte:字节,代表8个二进制位,计算机中存储的最小单元是字节

  • WORD:双字节,即2个字节,16位

  • DWORD:两个WORD,即4个字节,32位

一些常用单位:

  • 1b:1bit,1位

  • 1Kb:1024bit,即1024位

  • 1Mb:1024*1024bit

  • 1B:1Byte,1字节,8位

  • 1KB:1024B

  • 1MB:1024K

对于有符号数而言,二进制的最高为是符号位:0表示正数,1表示负数,比如 1在二进制中:

1  二进制位:0000  0001
-1 二进制位:1000  0001

正数的原码、反码、补码都一样,负数的反码=原码符号位不变,其他位取反,补码是反码+1

         1              -1
原码  0000  0001        1000  0001
反码  0000  0001        1111  1110
补码  0000  0001        1111  1111

常见理解:

  • 0的反码补码都是0

  • 计算机中是以补码形式运算的