zoukankan      html  css  js  c++  java
  • 让我们一起Go(八)

    前言:

             叹时间总是那么滴不够,离上次发本系列文章又很久了,由于总总原因,到现在才更新,唉,不多说了,今天继续我们的Golang......

    Go语言中的运算符

          

    上述表格(引自网络)已经很清楚的展示了Go语言的运算符已经它们的优先级,对于非常常见的这里就不一一介绍了,这里举几个运算符来玩玩。

    先看一例子:题目--给定一个int型数组,找出其中的奇数,打印出来?。大家动手试试,可以选择上面表格中的任意运算符完成。

    这题目很简单,如果一个数不能被2整除,那么就是奇数,好,我们试试%运算符,该运算符是取模,也就是说可以取得余数,那么如果对2取模,结果不是0,那么就是奇数了。看代码:

     

    这里定义了一个isOdd的方法用来判断数字是否是奇数,返回值是bool类型。该方法一个比较常见的错误是,有人会误认为模2后等于1 既 num%2==1则是奇数,但是这是不对的,因为当出现负数的时候,不管是奇数还是偶数都返回false,显然余数是负数的话不管如何都不会和1相等。如果你编译上面的代码,会发生奇怪的事情。尼玛,竟然是病毒???虽然明显是误报,但是我还是很诧异啊。不知道在你的机子上如何。

    其实也没必要觉得奇怪,杀毒软件一般都是根据特征码来判断是否是病毒,因此,某个程序编译出来的应用恰好符合也是很有可能的,因此我们也常常看到杀毒软件误杀某某软件了。要解决这个其实也简单,有时候只需调整下代码结构或者内容就可以了,这里我在打印结果下增加一行换行代码 fmt.Println()就没问题了。

    除了通过使用%运算符,其实还可以通过&运算符进行判断奇数。原理就是:

    (一)位运算的时候,我们知道任何奇数的二进制表示最低位都是1,

    例如 1 的二进制 0000 0001(为了方便描述,这里都取8位二进制来表示) ,3的二进制 0000 0011 ,21的二进制 0001 0101  ...

    (二)而&运算规则是 1&1 = 1 ,0&0 = 0,0&1=0,1&0=0.总之0&任何数都是0 只有1&1才是1 。

    那么我们就根据(一) (二)便可以拿1 二进制为 0000 0001 与任意数进行&运算,如果与1相&的数字是奇数,则结果高位全部是0,最低位1&1=1 最后是0000 0001。

    最后代码如下:

     再来看一个Go语言中特别点的运算符 &^ 表示and not

    假设 a &^ b 则该运算会从a上清除所有b的标志位,这是什么意思呢?还是看例子:

    a : 0000 0000 0010 0011                  = 35

    b:  0000 0000 1100 0101                  = 197

    ===================

         0000 0000 0010 0010                   = 34

    标志位这里是指为1的位,如果你觉得这样记起来麻烦,其实它是先进行了a ^ b (XOR)运算,然后将结果与b再进行&运算。

     可以通过程序验证结果:

    这次就到这里了,更多操作符的具体用法将会在以后相关知识点用到时再详细介绍。

    作者:Sirk  
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    sqlplus -S选项说明
    oracle中常见set指令
    nohup详解
    centos64位编译32位程序
    【PHP系列】框架的抉择
    【PHP系列】PHP推荐标准之PSR-4,自动加载器策略
    【PHP系列】PHP推荐标准之PSR-3,日志记录器接口
    【PHP系列】PHP推荐标准之PSR-1,PSR-2
    【项目管理】管理工具的抉择 --- 持续更新中
    【CNMP系列】CentOS7.0下安装FTP服务
  • 原文地址:https://www.cnblogs.com/vimsk/p/2921258.html
Copyright © 2011-2022 走看看