java 二进制图片叠加_使用二进制实现标志叠加

每一个标志都使用一个以1开头,后面全部接0的二进制表示,长度不限,如:

int x = 0x8             ->           1000

int y = 0x10           ->           10000

int z = 0x20           ->           100000

叠加的结果是:int a = x | y | z.    -> 111000

判断是否有x标志:

if((a & x) == x)            ->如果返回值为真,表示确实包含了x标记.

代码:

int x1 = 0x8;

int y1 = 0x10;

int z1 = 0x20;

int rrr = x1 | z1;

if((rrr & x1) == x1)

{

printf("有x标记"n");

}

if((rrr & y1) == y1)

{

printf("有y标记"n");

}

if((rrr & z1) == z1)

{

printf("有z标记"n");

}

示例:

package com.aptechb;

import java.util.Scanner;

/**

* 应用一:保存状态

*


* 比如在描述一个人的爱好时,会用多个复选框标识出选项:阅读,看电视,交际等,如何保存到数据库比较好呢?

*/

public class Binary {

public static void saveStatus() {

int status = 0x0; // 用于保存爱好,如果爱好项目很多,可以用long等.每一位保存一个爱好.

// 假设:

// 0000 0000 0000 0000 0000 0000 0000 1111

// 从低位到高位分别保存阅读,交际,电影,喝咖啡,即

// 0000 0000 0000 0000 0000 0000 0000 1(喝咖啡)1(电影)1(交际)1(阅读)

// 如果为0表示没有该爱好.

// 比如我的爱好有:电影,阅读,则

// status = 0x5;

// 将0x5与0x1做&运算,如果结果为0x1,则表示阅读是我的爱好

// 将0x5与0x10做&运算,如果结果为0x10,则表示交际是我的爱好

// 将0x5与0x100做&运算,如果结果为0x100,则表示电影是我的爱好

// 将0x5与0x1000做&运算,如果结果为0x1000,则表示喝咖啡是我的爱好

//接收输入

System.out.println("请输入对应数字:\n1.阅读\n2.交际\n4.电影\n8.喝咖啡\n\n0.结束输入\n");

Scanner scanner = new Scanner(System.in);

int input = scanner.nextInt();

while(input != 0){

status |= input;

input = scanner.nextInt();

}

System.out.println("您输入的结果计算后的二进制表示:" + Integer.toBinaryString(status));

System.out.println("\n-----------------\n您的爱好有:");

for (Hobby hobby : Hobby.values()) {

if ((status & hobby.getFlag()) == hobby.getFlag()) {

System.out.println(hobby);

}

}

}

public static void main(String[] args) {

saveStatus();

}

}

示例中用到的枚举:

package com.aptechb;

public enum Hobby {

阅读(0x1), 交际(0x2), 电影(0x4), 喝咖啡(0x8);

private int flag;

private Hobby(int flag){

this.flag = flag;

}

public int getFlag() {

return flag;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值