javascript,我的补码没有产生正确的数字

标签 javascript css

我正在为我的计算机科学类(class)编写一个基本计算器,它接受 0-255 之间的数字并将其转换为二进制、一个补码和两个补码。我和另一名学生一直在一起研究这个,我们都被困在补码上,它产生了错误的值(value)。例如,如果我们输入 11,则二进制补码应该是“1111 1011”,但我得到的是“1111 0101”,我不确定哪里出了问题?

我已经在 jsbin.com 上开始了一个演示,我希望这里有人能真正拯救我的生命(和我的成绩)并告诉我我和我的编码合作伙伴做错了什么。

jsbin -> http://jsbin.com/juqevomiliwo/1/edit

此外,我真的很想添加一些错误检查,例如如果用户输入了一个负数,或者如果用户输入了一个不在 0-255 值范围内的值,有人可以帮助我吗? ?我真的很想弹出一个窗口说,“很抱歉,您需要输入一个介于 0-255 之间的值”

我很抱歉问了这么多,但我不知道还能去哪里!我已经多次访问 stackoverflow 来帮助我解决问题,这是我第一次发布我不知道如何解决的问题!

非常感谢大家的宝贵时间和协助!

-马丁

代码如下:

<!DOCTYPE html>

<html>
<head>
    <title>Group Project</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <h1>Group Project 1</h1>
    <p>Enter a number between 0 and 255 <input id="theInput" type="text" /> <button onclick="doSomething()">Show Binary</button>   </p>
    <p>Unsigned Binary: <span id="binaryOutput"></span></p>
    <p>One's Complement: <span id="onesOutput"></span></p>
    <p>Two's Complement: <span id="twosOutput"></span></p>
    <script>
        function doSomething(){
            var i = document.getElementById('theInput').value; //gets number from input box and sets it to i
            var binary = pad(Number(i).toString(2), 8); //converts i to binary and pads with leading zeros until 8 digits long
            var ones = binary.toString(2).replace(/1/g, 'a').replace(/0/g, '1').replace(/a/g, '0');
            var twos = pad((Number(ones) + 1), 8);

            document.getElementById('binaryOutput').innerHTML = fancy(binary); //puts the binary in the Unsigned Binary field
            document.getElementById('onesOutput').innerHTML = fancy(ones); //puts the ones compliment in the One's Complement field
            document.getElementById('twosOutput').innerHTML = fancy(twos); //puts the twos compliment in the Two's Complement field
        }

        //adds leading zeros to achieve width
        function pad(n, width, z) {
            z = z || '0';
            n = n + '';
            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
        }

        //adds space every four digits
        function fancy(b) {
            return b.replace( /\d{4}/g, '$& ' ).replace( /\s$/,'');
        }

    </script>
</body>

最佳答案

在您的 twos = pad((Number(ones) + 1), 8); 行中,Number() 函数不会将二进制字符串转换为一个数字(它假定字符串是十进制的)。

您应该使用 twos = pad((parseInt(ones, 2) + 1).toString(2), 8); 代替。请参阅下面的代码段。

function doSomething(){
            var i = document.getElementById('theInput').value; //gets number from input box and sets it to i
            var binary = pad(Number(i).toString(2), 8); //converts i to binary and pads with leading zeros until 8 digits long
            var ones = binary.replace(/1/g, 'a').replace(/0/g, '1').replace(/a/g, '0');
            var twos = pad((parseInt(ones, 2) + 1).toString(2), 8);

            document.getElementById('binaryOutput').innerHTML = fancy(binary); //puts the binary in the Unsigned Binary field
            document.getElementById('onesOutput').innerHTML = fancy(ones); //puts the ones compliment in the One's Complement field
            document.getElementById('twosOutput').innerHTML = fancy(twos); //puts the twos compliment in the Two's Complement field
        }

        //adds leading zeros to achieve width
        function pad(n, width, z) {
            z = z || '0';
            n = n + '';
            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
        }

        //adds space every four digits
        function fancy(b) {
            return b.replace( /\d{4}/g, '$& ' ).replace( /\s$/,'');
        }
<h1>Group Project 1</h1>
<p>Enter a number between 0 and 255
  <input id="theInput" type="text" />
  <button onclick="doSomething()">Show Binary</button>
</p>
<p>Unsigned Binary: <span id="binaryOutput"></span>
</p>
<p>One's Complement: <span id="onesOutput"></span>
</p>
<p>Two's Complement: <span id="twosOutput"></span>
</p>

关于javascript,我的补码没有产生正确的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26289182/

相关文章:

html - 更改 Bootstraps 轮播中的箭头颜色

html - 按钮在 IE7 中飞到右边,多年来一直试图解决这个问题

javascript - 如何在对象中使用动态属性

javascript - 在 JavaScript 中使用 EventListener 动态创建元素

javascript - 使这个 Javascript 倒数计时器响应

html - Chrome 截掉了左边的部分字体,firefox 和 IE 显示正常。 Chrome 错误?

javascript - 通过 Nightmare js获取Ajax请求

php - 从 S3 下载存储桶中的对象列表

javascript - 动态显示一个分区取决于另一个分区的滚动条位置

javascript - 触发 DIV 容器 onclick 而不是在内容中