使用位运算访问属性

场景 节约内存
int 有4个byte换算成32bit 可以存放32个布尔值
在内存中存放一个布尔值最少都要1个byte,存进int可以节约内存空间

CUTE = 0x1 的二进制是 0000 0001

~CUTE 得到 -2 取反的二进制是 1111 1110

public class Cat {
    private static int CUTE = 0x1;
    private static int FAT = 0x2;
    private static int WHITE = 0x4;
    private int properties = 0;
    /**
     * 使用位运算设置猫咪萌的属性
     *
     * @param cute true为萌,false为不萌
     */
    public void setCute(boolean cute) {
        if (cute) {
            properties = properties | CUTE;// | 运算 
        } else {
            properties &= (~CUTE);// 取反和&运算是为了设置false代表的0
        }
    }
    /**
     * 这只猫萌吗?请在此处使用位运算读取properties,得到猫是否萌的结果
     *
     * @return 萌则返回true,否则返回false
     */
    public boolean isCute() {
        return (properties & CUTE) != 0;
    }
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.setCute(true);   
        System.out.println("这只猫萌吗:" + cat.isCute());  
    }
}
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注