java - 由于 XOR 按位 ^ 运算符,Java 中的 JavaScript 表达式的返回值类型不正确

标签 java javascript bit-manipulation xor scriptengine

我正在尝试计算这个表达式:

ScriptEngineManager sem = new ScriptEngineManager () 
ScriptEngine scriptEngine = sem.getEngineByName("js") ;
String expr = "true ^ true";
Boolean obj = (Boolean) scriptEngine.eval(expr);

但是返回的结果是java Double。我尝试了 String expr 的各种选项,例如:

字符串表达式 = "0x1 ^ 0x0"; String expr = "1 ^ 0";

基本上我希望能够使用 JavaScript 引擎来评估可能如下所示的各种表达式:

"ture && false || false (true || false && true || false XOR true)"

所有其他运算符,如 && 或 ||当我评估此类表达式并返回 boolean 值时工作得很好,但当它出现 XOR(它具有等效的 JavaScript 按位 ^ 运算符)时,它返回 Double。我真的不想将表达式转换为将 XOR 替换为某些逻辑运算符(例如 ((true || false) && !(true && false)) ),因为那样我就必须解析整个表达式字符串以转换 XOR变成上面的逻辑表达式。我对这个表达式求值的全部意义在于,我能够在无需解析其复杂性的情况下进行求值。

任何帮助将不胜感激!提前致谢!

最佳答案

从这里引用:http://www.howtocreate.co.uk/xor.html

“不幸的是,JavaScript 没有逻辑异或运算符。它有一个按位异或运算符 ^ 可以对两个数字进行按位比较,但是当你想获得两个表达式的异或结果时这无济于事, 不返回数字。

异或运算符可以用这个来模拟:

if( ( foo && !bar ) || ( !foo && bar ) ) {
  ...
}

或者少一个操作(取决于 foo 和 bar 的值):

if( ( foo || bar ) && !( foo && bar ) ) {
  ...
}

或者使用三元运算符使其更小:

if( foo ? !bar : bar ) {
  ...
}

关于java - 由于 XOR 按位 ^ 运算符,Java 中的 JavaScript 表达式的返回值类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364078/

相关文章:

java - 比较两种不同类型的 ArrayLists 以找到共同的数据

javascript - 动态网络表单

javascript - 将 HTML 元素附加到现有元素的 AngularJS 指令

c++ - 通过使用 size_t 的否定翻转最低有效一位

algorithm - 编写一个方法,获取 2 个数字作为输入并返回第三个不同的数字

c - 为什么这个 union 的大小是 2 位域?

java - 如何从 Guice 的注入(inject)器中检索带注释的实例?

java - 如何将 Maven list 添加到指定依赖项的 AAR

java - 我的数组哪里出界了?

javascript - 如何在 jQuery Mobile 嵌套列表中制作列表?