Vorzeichenbehaftet und umgekehrt (arithmetisch)

Wie konvertiere ich eine Zahl von unsigniert nach signiert?

signiert: -32768 bis 32767 nicht signiert: 0 bis 65535

Ich löse das Problem in JavaScript. Die Situation ist, dass ich eine Nummer habe, die z. von 0 auf 65535 und ich möchte es in einen angemessenen vorzeichenbehafteten Wert konvertieren.

Beispiel: 65535 sollte -1 werden.

Bitte verwenden Sie keine bitbezogenen Operationen, sondern etwas Arithmetisches.

Ich denke, dies sollte sprachunabhängig sein, vorausgesetzt, wir verwenden einen Datentyp, der groß genug ist.

Update: Umsetzung entsprechend der Antwort weiter unten:

function convertWordToShort(ival) {
    if (isNaN(ival) === false) {
        if (ival > 32767) {
            ival = ival - 65536;
        }
    }
    return ival;
}
function convertShortToWord(ival) {
    if (isNaN(ival) === false) {
        if (ival < 0) {
            ival = ival + 65536;
        }
    }
    return ival;
}
function convertIntToDWord(ival) {
    if (isNaN(ival) === false) {
        if (ival < 0) {
            ival = ival + 4294967296;
        }
    }
    return ival;
}
function convertDWordToInt(ival) {
    if (isNaN(ival) === false) {
        if (ival > 2147483647) {
            ival = ival - 4294967296;
        }
    }
    return ival;
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage