gpt4 book ai didi

javascript - 将带符号的十进制转换为用二进制补码编码的十六进制

转载 作者:可可西里 更新时间:2023-11-01 02:27:53 26 4
gpt4 key购买 nike

我需要使用二进制补码符号将一个有符号 整数编码为十六进制。例如我想转换

e.g. -24375 to 0xffffa0c9.

到目前为止,我一直在研究以下几行:

parseInt(-24375).toString(2)
> "-101111100110111"

这与 Wolfram Alpha displays 相匹配,但我不确定如何获得数字 (ffffa0c9) 的带符号 24 位 int 表示。

我已经弄清楚如何获取无符号二进制数并将其表示为二进制补码:

~ parseInt("101111100110111", 2) + 1
> -23475

但我不确定要将此数字的二进制表示转换为十六进制。

有什么想法吗?

最佳答案

为了创建固定大小的补码,我创建了工厂方法:

 function createToInt(size) {
if (size < 2) {
throw new Error('Minimum size is 2');
}
else if (size > 64) {
throw new Error('Maximum size is 64');
}

// Determine value range
const maxValue = (1 << (size - 1)) - 1;
const minValue = -maxValue - 1;

return (value) => {
if (value > maxValue || value < minValue) {
throw new Error(`Int${size} overflow`);
}

if (value < 0) {
return (1 << size) + value;
}
else {
return value;
}
};
}

现在,为了解决您的问题,您可以创建函数 toInt8toInt16toInt32 等。并使用它将 JS 数字转换为两人的赞美。 int8 示例:

const toInt8 = createToInt(8);

'0x' + toInt8(-128).toString(16); // -> 0x80
'0x' + toInt8(127).toString(16); // -> 0x7f
'0x' + toInt8(-1).toString(16); // -> 0xff

// Values less then 16 should be padded
'0x' + toInt8(10).toString(16).padStart(2, '0); // -> 0x0a

关于javascript - 将带符号的十进制转换为用二进制补码编码的十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146177/

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