over-golang/01-基础语法/05-运算符.md
2021-07-02 18:11:59 +08:00

3.6 KiB
Raw Permalink Blame History

一 运算符

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和1Go中不能直接使用二进制表示整数
  • 八进制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位

一些常用单位:

  • 1b1bit1位
  • 1Kb1024bit即1024位
  • 1Mb1024*1024bit
  • 1B1Byte1字节8位
  • 1KB1024B
  • 1MB1024K

对于有符号数而言二进制的最高为是符号位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
  • 计算机中是以补码形式运算的