打包粮草

还真有一位哥们(可能是姐们, who care~)说每篇前面的扯淡内容比后面的正文要好,读完扯淡就撤。虽然这话有些伤人,但冲着你告诉了我文章的优点,我就挺你到底。直接上最扯淡的部分:

马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,俩人过了多半辈子 谁也没见过谁 !

好,扯完了。 那位哥/姐们,你可以撤了。呵呵,开玩笑,哪能真赶走上帝呢,留下来和我一起学Golang吧。

书接上文,每种编程语言的入门级教程中,基本都是这个套路,先讲基本知识,再开始升阶,然后就结束。 看的多了,我也不免落入俗套。所以上节讲到了Golang的变量类型。本节开始入手操作运算符。

Golang的运算符基本分为以下几类:

  • 算术运算符
  • 关系运算符

  • 逻辑运算符

  • 位运算符

  • 分配运算符

  • 杂项运算符

我们逐项掰开了,揉碎了按个讲解。

算术运算符

顾名思义,就是加减乘除这一套小学内容。 编程使用最多的也就这么四个运算,像 i++,++i。基本每位从大学时代过来的人都经历过死记硬背i++/++i区别,然后应付考试的一段时光。真正开始写代码了以后,会发现知道原理和不知道原理,对工作几乎没影响。

假设A :=10 B:=20然后

操作符操作描述实例
+两数相加A + B = 30
-两数相减A - B = -10
两数相乘A B = 200
/两数相除B / A = 2
%取模运算,得出余数B % A = 0
++自增加一A++ = 11
自减减一A— = 9

算术运算到此为止。很简单,一目了然。 若有不懂,就写几段代码验证一下。 结果如果和你预期不一致,忠告一下,相信CPU。一定是你错了

关系运算符

和加减不同,这里计算的是相等,不相等,大于和小于。同样假设A :=10 B:=20然后

运算符描述实例
==判断左右两边是否相等(同数据类型情况下)(A == B) false.
!=判断左右两边是否不相等(同数据类型情况下)(A != B) true.
>判断左边是否大于右边(同数据类型情况下)(A > B) false.
<判断左边是否小于右边(同数据类型情况下)(A < B) true.
>=判断左边是否大于或者等于右边(同数据类型情况下)(A >= B) false.
<=判断左边是否小于或者等于右边(同数据类型情况下)(A <= B) true.

只要注意左右两边必须是可比较的,基本都用不错。还是那句话:若有不懂,就写几段代码验证一下。 结果如果和你预期不一致,忠告一下,相信CPU。一定是你错了(Copy X 1)

逻辑运算符

与关系不同,这里讨论的是与或非。"我与你,我或他,不是我" 这三种问题。这个时候,需要假设A :=true B:=false 然后

运算符描述实例
&&与。 两边都是ture,结果是ture。否则为false(A && B) false.
\\或。两边有一个ture,结果就是true。否则为false(A \\B) true.
!非。取反值。!(A && B) true.

写到与或非,就想到了大学上的电路课,导师田红丽,非常好的老师.每周的周四去实验室在电路板上面通过与或非门来模拟CPU,计算一些二进制数据。后悔当时光乐乐呵呵去玩了,没有好好学习。导致没有进入单片机的天堂,走上了编码的不归路。如果有来生,在此立誓,打死我都不碰计算机学院的大门。 最后补充一句,河北工业大学的计算机学院真的很强!( 软文免费推广)有推广需求,直接联系我

在表格里面插入'|',在PC上面展现会错行,所以提供下面的图片:

打包粮草 - 图1

位运算符

位运算和逻辑运算,模样看起来差不多。 但是使用方式和使用场景,一个天上一个更天上。 看下面的图,就看出不一样了。

pqp& qp \qp ^ q
00000
01011
11110
10011

位运算的与或非和逻辑运算大致相同,可仍然有不同。 位运算的与是 两位都是1时,结果为1,否则为0. 而或和逻辑运算的或相同,只要有一个1,则结果就是1,否则为0. 最后的非则很不相同,两位相同就是0,不同就是1. 说起来简单,用起来难。 因为平时使用的少,所以每次用的时候,我仍然会再去温习一遍。 如果你记性好,那就好。 如果记性不好,这页放到浏览器书签里,用的时候再打开看一下。

在表格里面插入'|',在PC上面展现会错行,所以提供下面的图片:

打包粮草 - 图2

下面从Golang官方文档抄一段说明,权当练习题,巩固记忆吧

  1. A = 0011 1100
  2. B = 0000 1101
  3. -----------------
  4. A&B = 0000 1100
  5. A|B = 0011 1101
  6. A^B = 0011 0001
  7. ~A = 1100 0011

Golang脱胎于C,所以默认也支持了C的位运算。相对于上面的运算符,下面的运算符更为常用些: (使用上面练习题的A和B值)

运算符描述实例
&按位进行与运算(A & B) = 12,二进制是 0000 1100
\按位进行或运算(A \B) = 61, 二进制是 0011 1101
^按位进行非运算(A ^ B) = 49, 二进制是 0011 0001
<<按位进行左移操作A << 2 = 240 二进制是 1111 0000
>>按位进行右移操作A >> 2 = 15 二进制是 0000 1111

来个图片

打包粮草 - 图3

分配运算符

这种运算符经常用到,但可能不太能意识到。所以这里也提一下,以防面试的时候被人XX。

分配运算符就是将运算后的值赋给内存中一个新的变量,这个变量的变量名可能是另外的名字,也可能是当前的名字。(和字符串不可修改有异曲同工之妙)

运算符描述实例
=简单的赋值操作符,从右操作数赋值到左操作数C = A + B 等同于 把A + B 的值赋给 C
+=将右操作数加到左操作数,并将结果赋给左操作数C += A 等同于 C = C + A
-=从左操作数减去右操作数,并将结果赋给左操作数C -= A 等同于 C = C - A
=将右操作数乘以右操作数,并将结果赋给左操作数C = A 等同于 C = C * A
/=将左操作数和右操作数相除,并将结果赋给左操作数C /= A 等同于 C = C / A
%=使用两个操作数来进行模运算,并将结果赋给左操作C %= A 等同于 C = C % A
<<=左移位和赋值运算符C <<= 2 等同于 C = C << 2
>>=右移位和赋值运算符C >>= 2 等同于 C = C >> 2
&=位与赋值运算符C &= 2 等同于 C = C & 2
^=位非赋值运算符C ^= 2 等同于 C = C ^ 2
\=位或赋值运算符C \= 2 等同于 C = C \2

来个图片

打包粮草 - 图4

其它运算符

其它就是下面这两个,用于指针操作

运算符描述实例
&返回地址.&a; 返回a内存实际位置.
返回指针.a; 指向a内存地址的指针.

Golang的运算符就上面这几种,而常用莫过于算术,逻辑运算符了。 其它不常用不代表不用,知道有这些运算符,用的时候,再看看上面的规则就OK了。

本节的最后提一下运算符里的优先级。 这些文字可不是为了充字数的,真心有用。

优先级

运算符优先级决定表达式中元素的分组。最终会影响表达式的计算方式。某些运算符的优先级高于其他运算符。例如,乘法运算符的优先级高于加法运算符。

例如x = 7 + 3 2;这里,x是13,不是20,因为运算符的优先级高于+,所以它首先乘以3 * 2然后加到7。

在这里,具有最高优先级的操作符出现在表的顶部,最低的则出现在底部。在表达式中,会按照优先级进行计算。

类别运算符结合方式
Postfix() [] -> . ++ - -Left to right
Unary+ - ! ~ ++ - - (type) & sizeofRight to left
Multiplicative / %Left to right
Additive+ -Left to right
Shift<<>>Left to right
Relational<<= >>=Left to right
Equality== !=Left to right
Bitwise AND&Left to right
Bitwise XOR^Left to right
Bitwise OR\Left to right
Logical AND&&Left to right
Logical OR\\Left to right
Conditional?:Right to left
Assignment= += -= *= /= %=>>= <<= &= ^= \=Right to left
Comma,Left to right

来个图片

打包粮草 - 图5

为了保证权威性和准确性,我原文照搬Golang官方文档的说明,没有修改一个字母。 所以出了问题,不要找我, 找Golang开发组去。🙄

兵马未动粮草先行,开发语言里,运算符算是一种粮草了。 因此本节就开始打包这些粮草。 如果看着着急,感觉进度慢 。嗯。 大哥,你自己试试,一个字一个字的码起来,真的很累…… 以后等内容充实了,开始上一些demo了。你就感觉快了。