Skip to content

Commit 2a2553b

Browse files
committed
βž• Add Two's complement logic #24
1 parent 53f73c5 commit 2a2553b

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

β€Žjs/scripts.js

+36
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,22 @@ var rechner = (function (rechner) {
328328
return parseInt(binary, 2);
329329
}
330330

331+
// logic binary to decimal - Signed -> Two's complement
332+
333+
function getSignedInteger(binary) {
334+
let negative = (bits[0] === '1');
335+
if (negative) {
336+
let inverse = '';
337+
for (let i = 0; i < bits.length; i++) {
338+
inverse += (bits[i] === '0' ? '1' : '0');
339+
}
340+
return (parseInt(inverse, 2) + 1) * -1;
341+
} else {
342+
return parseInt(bits, 2);
343+
}
344+
}
345+
346+
331347
// logic decimal to binary
332348

333349
// IIFE to scope internal variables
@@ -403,6 +419,26 @@ var rechner = (function (rechner) {
403419
return -Math.abs(num);
404420
}
405421

422+
// logic decimal to binary- Signed -> Two's complement
423+
424+
function toTwosComplement(integer, numberBytes, dontCheckRange) {
425+
// @integer - > the integer to convert
426+
// @numberBytes -> the number of bytes representing the number (defaults to 1 if not specified)
427+
428+
var numberBits = (numberBytes || 1) * 8;
429+
430+
// make sure its in range given the number of bits
431+
if (!dontCheckRange && (integer < (-(1 << (numberBits - 1))) || integer > ((1 << (numberBits - 1)) - 1)))
432+
throw "Integer out of range given " + numberBytes + " byte(s) to represent.";
433+
434+
// if positive, return the positive value
435+
if (integer >= 0)
436+
return integer;
437+
438+
// if negative, convert to twos complement representation
439+
return ~(((-integer) - 1) | ~((1 << numberBits) - 1));
440+
}
441+
406442
// functions Buttons
407443

408444
// AC - All Clear

0 commit comments

Comments
Β (0)