无法通过按位运算获得长值

时间:2019-01-17 11:49:19

标签: java bitmap bit-manipulation bitwise-operators bitmask

我需要获取以下按位运算的输出以进行进一步处理。不幸的是,每当我尝试将输出转换为int或long类型时,都会出现Number格式异常。如何确保可以处理的类型的输出?

String TYPE = "type";
long TOTAL_MASK = 0xFFFFFFFF;
long BASE_INBOX_TYPE = 20;
long BASE_TYPE_MASK = 0x1F

long type = Integer.valueOf("" + TYPE + " & " + (TOTAL_MASK - BASE_TYPE_MASK) + " | " + BASE_OUTBOX_TYPE + "");

2 个答案:

答案 0 :(得分:2)

Integer.valueOf(String)用于解析文本中的数字文字,而不是评估任意表达式。按照javadoc的方法:

  

自变量被解释为表示一个带符号的十进制整数,就像自变量已被赋予parseInt(java.lang.String)方法一样。

您需要将表达式写为代码,例如:

long type = (TOTAL_MASK - BASE_TYPE_MASK) | BASE_OUTBOX_TYPE;

答案 1 :(得分:1)

某些运算符将一元数值提升应用于单个操作数,该运算数必须产生数字类型的值,并且如果该操作数是编译时类型byte,short或char,则通过以下方式将其提升为int类型的值不断扩大的原始转换(第5.1.2节)。

String TYPE = "type";
long TOTAL_MASK = 0xFFFFFFFF;
long BASE_INBOX_TYPE = ~20; // (~)promotion to int first (not necessary)
long BASE_TYPE_MASK = 0x1F;

long type = (TOTAL_MASK - BASE_TYPE_MASK) | BASE_INBOX_TYPE;

System.out.println(type);