gpt4 book ai didi

c - 需要在 C 中将 2 的补码转换为十进制的最快方法

转载 作者:行者123 更新时间:2023-12-04 12:30:34 25 4
gpt4 key购买 nike

我在 32 位中有一定的 18 位(在 2 的补码中)。我需要将它们转换为十进制。请给我看一段 C 代码。

最佳答案

首先你需要做sign extension在您的 18 位上,填写 native int:

const int negative = (smallInt & (1 << 17)) != 0;
int nativeInt;

if (negative)
nativeInt = smallInt | ~((1 << 18) - 1);
else
nativeInt = smallInt;

如果该数字被认为是负数(即设置了第 17 位),我们按位或使用在所有剩余位中都有一个位模式的位模式。这将创建适当的负 native 大小整数。

然后像往常一样打印 native 整数,因为您听起来好像需要十进制字符串表示:

char buf[12];

snprintf(buf, sizeof buf, "%d", nativeInt);

当然,最后一部分可能与您的期望完全不符;它也许不是“最快的”。由于您的输入范围有限,只有 18 位,因此可能会想出一些更优化的东西。

一些想法:

  1. 删除缓冲区大小参数(即使用 sprintf()),因为我们可以确定所需的最大字符数。
  2. 因为我们知道范围,所以使用不太通用的东西,从不检查范围之外的值。
  3. 如果有的话,使用 itoa(),不如 s*printf() 通用,所以可能更快。

关于c - 需要在 C 中将 2 的补码转换为十进制的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689028/

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