zoukankan      html  css  js  c++  java
  • 老程序猿的奇技淫巧们

    首先声明:我不是老程序猿。

    学JAVA出身,一直对C++之类的古老语言不感冒(喷这句话的程序员都是没前途的╮(╯_╰)╭),毕业了入手了一份c++服务器维护的活,干着吧,却也让我领略到老程序猿们的一些编程技巧。上网搜索了蛮多没看到类似的东西,就决定骚微分享一下了。

    & 位与的小用法:

    首先声明一个使用场景:

    某聊天软件有各种钻石服务:普钻,红钻,黑钻和叼钻,所有用户都享受普钻服务,其他各种钻都是需要另外开通的。

    那么我的数据表(特指关系型数据库)可能是这样的:

    [accountid, 普钻,红钻,黑钻,叼钻]

    (写到这里楼主已经不认识‘钻’字了)

    如果老板今天心血来潮,说我们需要给土豪用户更好更周到的服务,于是数据表需要再增加一个字段--壕钻。

    然后我想要分享的玩意,他的数据表是这样的:

    [accountid, 各种钻]

    不问各位是不是了,就是优雅很多╮(╯_╰)╭。

    好了,接下来说做法:

    我们取一串2的次方数:1,2,4,8,16……

    设普钻为1,红钻为2,黑钻为4,叼钻为8,然后老板一声令下,咱又加了一个壕钻:16。

    假设我们的大土豪用户x开通了所有的钻,那么数据表中[各种钻]应该为1+2+4+8。

    今天他第一时间开通了壕钻:我们update 某数据表 set 各种钻 = 各种钻 + 16 where accountid = 大土豪。(希望没写错这个sql。。。)

    然后大土豪的各种钻字段就变成了:1+2+4+8+16(楼主的小米系统居然没有计算器。。)

    当我们需要判断大土豪是否开通了黑钻的时候,只需要判断 (黑钻 & 各种钻)!= 0  就可以了。

    我说的太凌乱了╮(╯_╰)╭  还是看看底下的代码吧。

    a1 = 1; a2 = 2; a3 = 4; a4 = 8; a5 = 16;
    
    b1 = a1;
    b2 = a1 + a2;
    b3 = a2 + a4 + a5;
    //判断加数中是否有a2
    if((a2 & b1) != 0){print("我输出失败了!");}else{print("输出是我!");} if((a2 & b2) != 0){print("输出是我!");} if((a2 & b3) != 0){print("输出还是我!");}

    这个东东的用途还是挺广的,比如复选框神马的。。(我可耻地只举出一个例子)

    维护自家服务器的时候注意到的,让我想起来刚学程序那会,玩au3,au3很多函数传参会用到这招,把需要传入的参数相加就可以实现这些参数的功能。当时只知其然╮(╯_╰)╭  好吧,顺便说说其所以然:

    把这些数转成二进制就是:

     1, 10, 100, 1000, 10000……
    [1]  [2]  [4]   [8]   [16]

    可以发现这些数中的1从左至右把每个位置都占了。竖着看

    1-------------00001
    2-------------00010
    4-------------00100
    8-------------01000
    16------------10000

    可以把二进制的1看作是一个list:它在第一个位上有东西,其他位置为空。

    再给这个1加上4,:那么这个list就变成了第一个位和第三个位上都有东西了。

    换句话说,给这些数相加,其实就是给这个二进制的list对应的位置本来为空的,加了点东西进去。

    1+4=5 (00101)在1和3两个位置都有东西,而4(00100)在第三个位置上有东西,进行位与运算,就是4询问5(1+4):我表示第三个位置,你那里有东西么,有的话咱成交。

    同样的,如果是2(00010)与1+4=5进行位与运算,2就会问5(1+4)要第二个位置的东西,5拿不出,于是谈判破裂。

    具体位与是如何运算的,请移步:www.baidu.com

    随性说了半天,也不管你们听没听懂了╮(╯_╰)╭  只是觉得这东西很有价值,就想分享出来,笔力有限,大家见谅。

  • 相关阅读:
    HTML <h1>
    HTML <body> 标签
    如何挑选深度学习 GPU?
    视频动作定位的分层自关注网络:ICCV2019论文解析
    三维点云去噪无监督学习:ICCV2019论文分析
    摄像头定位:ICCV2019论文解析
    深度学习扫地机器人
    细粒度语义分割:ICCV2019论文解析
    目标形体形状轮廓重建:ICCV2019论文解析
    2-2.5-3D的室内场景理解
  • 原文地址:https://www.cnblogs.com/LoadingChan/p/3583127.html
Copyright © 2011-2022 走看看