编程之“与、或(&|)”的使用技巧

因为手头开着Dev C++,所以示例代码用C语言来演示了,用JAVA的道理是一样的。


先看一段基本的代码:

#include <stdio.h>

int PRIVATE = 0x1;
int PUBLIC = 0x2;
int FINAL = 0x4;
int STATIC = 0x8;

int main(){
    int yu(int a,int b);
    int isPRIVATE(int a);
    int isPublic(int a);
    int isFINAL(int a);
    int isSTATIC(int a);
    int identifer = PUBLIC|STATIC;
    printf("identifer:%d\n",identifer);
    printf("is PRIVATE:%d\n", isPRIVATE(identifer)); 
    printf("is Public:%d\n",  isPublic(identifer)); 
    printf("is FINAL:%d\n",   isFINAL(identifer)); 
    printf("is STATIC:%d\n",  isSTATIC(identifer));
    system("PAUSE");
    return 0;    
}

int yu(int a,int b){
    return (a&b)!=0;    
}

int isPRIVATE(int a){
    return yu(a,PRIVATE);
}

int isPublic(int a){
    return yu(a,PUBLIC);
}
int isFINAL(int a){
    return yu(a,FINAL);
}
int isSTATIC(int a){
    return yu(a,STATIC);
}

这段代码定义了4个标识符,private,public,static,final

首先有一个方法(这里没写出来,java类中有)可以获取一个方法的标识符属性,例如public static void main中就有public和static,返回值包含这两项。

上面在定义4个标识符的时候,使用了1,2,4,8来表示,这4个数的特点是,二进制表示中只有一位是1,其他位是0.


返回值包含public和static时,通过或运算,即可让返回值包含这两项结果

PUBLIC|STATIC = 

0010

1000

--------------------

1010

上面的结果就是10(或运算,只要某位是1,结果就是1,只有(0,0)才是0)。


我们需要做的就是,通过结果10,来判断标识符含有那些字段。


这里就需要用到与(&)运算,与(&)运算是二进制表示中,相同的位如果是(1,1),那么这个位的结果是1,(1,0),(0,1),(0,0)的结果都是0.


因而通过这个运算,我们可以判断,一个数字的某位是否为1,想判断哪位,就用那一位是1,其他位是0的数字是做与运算,如00000100,01000000.


如果到这里能明白,就知道如果那一位是1,那么(1,1)的结果肯定是1,那么整体的结果肯定不是0,所以可以根据&的结果!=0来判断。


这种方式的好处是,可以将多种状态放到一个参数上,通过判断参数来确定不同的状态,在某些情况下可以减少参数的个数。


这个方法在JDK的源码中是有的,类名可能是Modifier,感兴趣的可以找找看。


上面代码的运行结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

isea533

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值