cs插件吧 关注:8,208贴子:88,036

【小白白】位运算简介 & 仿CSO新版杀敌提示例程

只看楼主收藏回复


实在找不到图镇楼了怎么办


IP属地:广东1楼2015-04-19 01:42回复
    首先我们说下逻辑运算什么的。
    1代表真,0代表假这个大家都知道吧。
    根据数学选修2-2里面的那些逻辑语言,
    用1代表真命题,0代表假命题。
    与运算(&&)同真返回真,其余返回假
    或运算(||)同假返回假,其余返回真
    否定运算(!)。。。
    这些是在if等条件句里面这样用的
    (不知道我说什么没关系继续看吧


    IP属地:广东2楼2015-04-19 01:52
    回复
      然而那只是对条件句的判断,其实有一种神奇的运算叫做位运算
      优点及作用:提高效率、增添逼格
      首先两个数字按位运算时要把他们换成二进制。
      比如12其实是1100,10是1010
      位运算就是按照二进制把这个数字的每一位进行逻辑运算
      位与(&) 12&10=2^3=8(二进制1000)
      位或(|) 12|10=2^3+2^2+2^1=14(二进制1110)
      位非(~) 此货太坑我要跳过


      IP属地:广东3楼2015-04-19 02:06
      回复
        还有一个
        按位左移<<
        比如(1<<3)=(二进制1000)=2^3=8
        (12<x1)=(二进制11000)=2^4+2^3=12*2^1
        或者说(x<<y)=x乘2^y
        再简单一点就是(1<<y)=2^y


        IP属地:广东4楼2015-04-19 02:10
        回复
          应用篇:这才是重点
          原命令:new bool:g_bIsZombie[33]
          现命令:new g_bitsIsZombie
          原命令:g_bIsZombie[id] = true
          现命令:g_bitsIsZombie |= (1<<id)
          原命令:g_bIsZombie[id] = false
          现命令:g_bitsIsZombie &= ~(1<<id)
          原命令:if(g_bIsZombie[id])
          现命令:if(g_bitsIsZombie & (1<<id))
          原命令:if(!g_bIsZombie[id])
          现命令:if(!(g_bitsIsZombie & (1<<id)))
          原命令:for(new i=0;i<33;i++) g_bIsZombie[i] = false
          现命令:g_bitsIsZombie = 0
          是不是瞬间就有逼格了


          IP属地:广东5楼2015-04-19 02:15
          收起回复
            例程篇:仿CSO杀敌提示,综合运用位运算等。
            http://codepad.org/CiDQgeXA


            IP属地:广东7楼2015-04-19 02:35
            回复
              位运算写成竖式比较容易看懂


              IP属地:广东9楼2015-04-20 23:15
              收起回复
                补充:
                for(new i=0;i<33;i++)
                g_bIsZombie[i]=true
                替换为
                g_bitsIsZombie = (1<<33)-1
                (未测试不知是否可行


                IP属地:广东来自iPhone客户端10楼2015-04-21 12:49
                收起回复
                  再随便补充一点什么
                  判断x的奇偶性直接x&1
                  如998&1=0(偶数)
                  233&1=1(奇数)


                  IP属地:广东来自iPhone客户端11楼2015-04-23 23:38
                  回复
                    /*==============================================
                    Bits Function
                    ==============================================*/
                    #define BitsGet(%1,%2) (%1 & (1 << (%2 & 31)))
                    #define BitsSet(%1,%2) %1 |= (1 << (%2 & 31))
                    #define BitsUnSet(%1,%2) %1 &= ~(1 << (%2 & 31))
                    stock BitsCount(x)
                    {
                    x = (x & 0x555555) + ((x >> 1) & 0x555555);
                    x = (x & 0x333333) + ((x >> 2) & 0x333333);
                    x = (x & 0xF0F0F0F) + ((x >> 4) & 0xF0F0F0F);
                    x = (x & 0xFF00FF) + ((x >> 8) & 0xFF00FF);
                    x = (x & 0x00FFFF) + ((x >> 16) & 0x00FFFF);
                    return x;
                    }
                    另外提供萌の代码


                    IP属地:广东13楼2015-04-30 22:01
                    回复
                      用途:
                      获取人类的数目:BitsCount(g_bitsIsAlive & ~g_bitsIsZombie)
                      获取僵尸的数目:BitsCount(g_bitsIsAlive & g_bitsIsZombie)
                      等等。。。可以获取那个代码里面有几个1


                      IP属地:广东14楼2015-04-30 22:02
                      回复
                        整数long上限是2^31-1上面的某些操作会爆掉的


                        来自iPhone客户端15楼2015-05-01 18:55
                        收起回复
                          太糟糕了


                          IP属地:重庆来自手机贴吧16楼2015-05-15 17:28
                          回复
                            太复杂了


                            IP属地:湖北17楼2015-05-15 18:29
                            回复