gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:52:47 25 4
gpt4 key购买 nike

我正在为我的计算机科学类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com