我需要获取以下按位运算的输出以进行进一步处理。不幸的是,每当我尝试将输出转换为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 + "");
答案 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);