【问题标题】:~ and - Javascript Operator Questions~ 和 - Javascript 运算符问题
【发布时间】:2015-03-13 22:12:46
【问题描述】:

我正在尝试编写一个程序,它将输入转换为二进制,以及这种输入的二进制补码。我相信 ~ 应该翻转位并且 - 应该做同样的事情加上一个 1 in 1 的值,但结果并不像预期的那样。

<!DOCTYPE html>
<html>
    <head>
        <script>
            function doStuff(){
                var numConv = document.getElementById("origNumber").value;  
                var aNumber = Number(numConv); 
                if (aNumber < 0  || aNumber > 255) 
                    alert("Please enter a number between 0 and 255.");
                else 
                    document.getElementById("binary").innerHTML = aNumber.toString(2); 
                    document.getElementById("ones").innerHTML = (~aNumber).toString(2); 
                    document.getElementById("twos").innerHTML = (-aNumber).toString(2); 


            }
        </script>
    </head>
    <body>
        <input type="text" id="origNumber" />
        <button onclick = "doStuff()">Click Me</button>

       <p>Unsigned Binary:</p> 
       <p id="binary">The binary translation will appear here.</p> <!-- Where the binary appears -->

       <p> One's Complement:</p>
       <p id="ones">The one's complement will appear here.</p> <!-- Where one's complement appears -->

       <p> Two's Complement:</p>
       <p id="twos">The two's complement will appear here.</p> <!-- Where two's complement appears -->
    </body>

</html>

在脚本的“else”部分中,我有几行应该将变量 aNumber 转换为所需的 1 和 2 的补码,但事实并非如此。

例如,如果输入 50,则二进制是正确的,但一个变成 -51,两个变成 -50。我意识到将 (~aNumber) 和 (-aNumber) 乘以 -1 会消除负值,但它不会修复不正确的值。

有什么方法可以修复 - 和 ~ 运算符或规避它们?

【问题讨论】:

  • Per Pointy 的回答,出于对一切神圣事物的热爱,不要在if 语句上使用花括号。它使一切变得不必要地更加困难。

标签: javascript bitwise-operators twos-complement ones-complement


【解决方案1】:

注意 - 我不认为这是问题,但这是个问题。

你遗漏了一组{ }

            else { 
                document.getElementById("binary").innerHTML = aNumber.toString(2); 
                document.getElementById("ones").innerHTML = (~aNumber).toString(2); 
                document.getElementById("twos").innerHTML = (-aNumber).toString(2); 
            }

如果没有这些,后两行超出if else 语句的影响范围,并且无论if 测试如何都将运行。

再次编辑 — 您实际询问的问题可以通过屏蔽值的低 8 位来解决:

        document.getElementById("ones").innerHTML = (~aNumber & 255).toString(2); 
        document.getElementById("twos").innerHTML = (-aNumber & 255).toString(2); 

这两个操作都会影响值的符号,所以如果你不屏蔽,运行时会认为它们是负数,.toString() 会做出相应的响应。

【讨论】:

  • 我继续在 if 和 then 语句中分别添加 { },以防万一。起初它并没有改变任何东西,然后我添加了 & 255 效果很好,谢谢。我没有意识到掩盖它们会是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2011-10-20
  • 1970-01-01
相关资源
最近更新 更多