如何将数字从无符号转换为有符号?
签名:-32768至32767
未签名:0到65535
我正在用JavaScript解决这个问题。情况是我有一个从0到65535的数字,我想把它转换成一个合理的有符号值。
例:65535应该变成-1。
请不要使用任何与位相关的操作,而是使用算术运算。
假设我们使用的数据类型足够大,我想这应该是独立于语言的。
更新:
根据答案进一步向下执行:

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

最佳答案

只要测试数字是否超过一半,然后减去模数。

if(x > 32767) {x = x - 65536;}

10-08 03:51