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

2024-02-26

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


首先你需要做符号扩展 http://en.wikipedia.org/wiki/Sign_extension在你的18位上,填写本机int:

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

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

如果该数字被认为是负数(即设置了位 17),我们将使用所有剩余位中都有 1 的位模式对其进行按位或。这将创建正确的负本机大小整数。

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

char buf[12];

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

当然,最后一部分可能根本不符合您的期望;它可能不是“最快的”。由于输入范围有限,为 18 位,因此可能可以提出更优化的方案。

一些想法:

  1. 删除缓冲区大小参数(即使用sprintf())因为我们可以非常确定所需的最大字符数。
  2. 因为我们知道范围,所以使用不太通用的东西,从不检查范围之外的值。
  3. Use itoa()如果你有的话,不那么一般s*printf()所以可能会更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要在 C 中将 2 的补码转换为十进制的最快方法 的相关文章

随机推荐

  • 无法将类型 string 隐式转换为 System.date.time 但在 datetime 中声明

    我是 C 的初学者 编写了一些代码 但出现错误 错误是 无法将字符串类型隐式转换为 System date time 但我在这里看到我在字符串中声明 public partial class HDate private string Sta
  • 为什么当我 pip freeze 时没有出现 setuptools 1.3.1?

    我在跑步virtualenvwrapper和 Ubuntu 12 04 上的朋友 virtualenvwrapper 1 7 1 2 virtualenv 1 7 1 2 pip 1 0 Distribute 0 6 24 Python 2
  • 从 perf 获取用户空间堆栈信息

    我目前正在尝试在我正在测试的 PostgreSQL 版本中追踪一些幻像 I O 它是一个多进程服务器 将磁盘 I O 关联回特定后端和查询并不简单 我还以为Linux的perf工具将是理想的选择 但我正在努力捕获块 I O 性能计数器指标并
  • SQL中如何知道记录的插入日期

    我在用phpMyAdmin对于我的项目 我有一张没有的桌子date datetime field 我想知道是否有办法知道我何时在数据库中插入每条记录 在设计数据库时 如果您忘记保留一个额外的字段来存储一行的插入时间 那么您只剩下一个选项来了
  • “激活”的 RESTful URL

    我有一个资源 project 可以激活和停用 用于此目的的最 RESTful URL 端点是什么 现在我在想 projects id activate and projects id deactivate 但我不认为这很RESTful 另外
  • 为什么要检查 cls 是否是 __subclasshook__ 中的类?

    In the Python 标准库文档 https docs python org 3 library abc html abc ABCMeta subclasshook 示例实现 subclasshook is class MyItera
  • 替代数字之和 (XML/XSL)

    需要在使用 XSLT 从 XML 文件接收的数字中添加备用数字 例如 如果我收到 123456789 我需要使用 XSLT 函数从最右边计算备用数字总和 我对此有什么建议吗 谢谢 拉克斯米坎特 使用 XSLT 2 0 可以非常轻松地做到这一
  • 使用 dplyr 总结逻辑数据帧

    我正在尝试使用两个变量来总结数据框 我基本上想通过变量 2 分解变量 1 以便在 100 堆积条形图中绘制结果 我有多个逻辑类型的列 它们可以分为两个主要类别 用于创建细分 我尝试过使用gather from dplyr将数据帧转换为长格式
  • Unity 5.4.2f-GVR13 中的 Daydream 非 VR 模式 [重复]

    这个问题在这里已经有答案了 上周我尝试将我的 Unity 项目集成到 Daydream 集成进展顺利 现在我试图将第一个场景 包括登录过程 所以我需要 android 软键盘 与应用程序的其余部分分开 我希望应用程序像任何 android
  • 在 C# 中记录对象的所有属性。如何记录内部对象属性?

    我试图 1 记录对象的所有属性 以及 2 其中特定对象类型的所有属性 我可以做 1 但不能做 2 现在就是这种情况 foreach PropertyDescriptor descriptor in TypeDescriptor GetPro
  • 当查询使用包含时,Rails 如何处理 has_many?

    如果我有一个包含许多帖子的用户模型 那么在以下场景中 Rails 将对数据库执行多少个查询 class User has many posts this is the main method in question def has post
  • msysGit:为什么git日志输出空行?

    当我在终端窗口底部键入命令时 插入的空白行似乎越少 如果我在终端窗口的顶部输入它 它会插入几乎整个窗口高度的空白行 如果我在最底部键入它 则不会插入空行 看起来分页程序正在将输出推送到终端窗口的底部 但我希望输出位于我的命令的正下方或顶部
  • 如何检查是否隐式生成了移动构造函数?

    我有几个类 我希望检查是否正在生成默认移动构造函数 有没有办法检查这一点 无论是编译时断言 还是解析生成的目标文件 或者其他 励志例子 class MyStruct public ComplicatedBaseClass std vecto
  • 如何构建、分区和构建大型 MVC 应用程序以便以小的增量片段进行部署?

    我们将开发一个非常大的垂直市场 Web 应用程序 并且倾向于 MVC 方法 它将有 1 个应用程序中所有视图共用的母版页 主控会为整个应用提供一个导航 搜索框架 这将允许用户搜索和选择实体 然后导航到要执行的功能 数据库模型将有 700 到
  • 不能使用公共嵌套类作为私有方法参数

    在下面的代码中 class Outer private void f private Outer Inner in Wrong public class Inner void f public Outer Inner in OK f pri
  • 如何保证 OAuth 消费者秘密的安全,以及当其泄露时如何反应?

    这个问题是关于尝试了解在 Android 等移动平台上实现 oauth 所涉及的安全风险 这里假设我们有一个 Android 应用程序 其代码中嵌入了消费者密钥 秘密 假设消费者的秘密被泄露 并且黑客已经掌握了它 那么会产生什么后果 消费者
  • Debian平台上如何使用pm2启动命令?

    以下是 GitHub 上文档的链接 https github com Unitech pm2 startup script Generation pm2 startup https github com Unitech pm2 startu
  • 当变量为 Null 时 Laravel 5.3 验证失败

    自从 Laravel 从 5 1 升级到 5 3 以来 我在验证方面遇到了一些奇怪的问题 当我发布这样的数据时 firstName null 验证规则是这样的 validator Validator make postData firstN
  • 在 Flask 中迭代提交的表单字段?

    在 Flask 0 8 中 我知道我可以使用以下方式访问各个表单字段form fieldname data 但是有没有一种简单的方法来迭代所有表单字段 我正在构建一个电子邮件正文 我想循环所有字段并为每个字段创建一个字段名称 值条目 而不是
  • 需要在 C 中将 2 的补码转换为十进制的最快方法

    我有 32 位内的某个 18 位 2 的补码 我需要将它们转换为十进制 请给我看一段 C 代码片段 首先你需要做符号扩展 http en wikipedia org wiki Sign extension在你的18位上 填写本机int co