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;
}