美文网首页
异或( ^= ) 巧妙完成开关灯

异或( ^= ) 巧妙完成开关灯

作者: pdog18 | 来源:发表于2017-12-15 15:37 被阅读34次

如果现在要写一个控制器,对同一个按钮进行操作,点击一次是开灯,再点击一次是开灯,以此类推。

非常简单,创建一个成员变量,然后每次使用时取反就好了就可以了。
伪代码如下:

    boolean flag = false;

    void onClick() {
        flag = !flag;
        if (flag) {
            //on
        } else {
            //off
        }
    }

取反的地方在于flag = !flag;

而通过 ^=就简单一点

    boolean flag = false;

    void onClick() {
        if (flag ^= true) {
            //on
        } else {
            //off
        }
    }

flag ^= true,每次操作的时候对都flag进行了改变,并且每次改变后都值都是之前的值相反。

例如有个Light对象,它有一个trun()方法每次,接收一个boolean参数

   boolean flag = false;

   void onClick() {
       flag = !flag;
       light.trun(flag);
   }

可以改成

   boolean flag = false;

   void onClick() {
       light.trun(flag ^=true);
   }

源代码从5行变成了4行,整整节省了20%!,更别提四舍五入之后的情况了。

相关文章

  • 异或( ^= ) 巧妙完成开关灯

    如果现在要写一个控制器,对同一个按钮进行操作,点击一次是开灯,再点击一次是开灯,以此类推。 非常简单,创建一个成员...

  • 与&和或|和异或^的巧妙应用

    &:与,要求都是1才为1,其他都为0|:或,要求有一个为1即可1,全是0为0^:异或,要求相同为0,不同为1 1、...

  • 异或

    定义:同为0,异为10^0 01^0 1奇数^1 加-1;偶数^1 加1任何整数^0 不变:abb(可以调换顺序)...

  • 异或

    异或Exclusive or(通常称为“XOR”)是布尔二进制操作符,当第一个输入或第二个输入(但不是两者都是)为...

  • 异或

  • 异或

    异或 题目原链接:https://www.nowcoder.com/practice/fc05f68c5f4743...

  • 异或

    1010异或1111=0101异或运算还可以 是n-1-N 例如 1111-1010 = 0101

  • 异或

    5.1 概述 异或(XOR)是一种逻辑二元操作,当两个输入中有且仅有一个为真时,结果为真。 另一种思考异或的方式是...

  • 《鬼谷子》|开合有道

    “或开而示之,或阖而闭之。开而示之者,同其情也;阖而闭之者,异其诚也。可与不可,审明其计谋,以原其同异。离合有守,...

  • 存或所异,异或所存…

    《生》 隐约有声响,翩跹,三两, 划破长空的瞬,圮绝寂寥; 星晕下,墨影飘洒, 踟躇而又悠扬。 汲汲追...

网友评论

      本文标题:异或( ^= ) 巧妙完成开关灯

      本文链接:https://www.haomeiwen.com/subject/ebldwxtx.html