用C代码编写二进制数字系统[重复]

2023-11-21

当我们使用0x十六进制数字的前缀,以及0对于八进制数,对于二进制数有什么可以做的吗?

我尝试过b后缀,但是GCC不允许。

错误:整数常量上的后缀“b”无效

是否可以?


标准 C 没有定义二进制常量。不过有一个 GNU C 扩展(在流行的编译器中,clang 也采用了它):0b or 0B前缀:

int foo = 0b1010;

如果您想坚持使用标准 C,那么有一个选择:您可以组合宏和函数来创建一个almost可读的“二进制常量”特征:

#define B(x) S_to_binary_(#x)

static inline unsigned long long S_to_binary_(const char *s)
{
        unsigned long long i = 0;
        while (*s) {
                i <<= 1;
                i += *s++ - '0';
        }
        return i;
}

然后你可以像这样使用它:

int foo = B(1010);

如果您打开大量编译器优化,编译器很可能会完全消除函数调用(不断折叠)或至少会内联它,因此这甚至不会成为性能问题。

Proof:

以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>


#define B(x) S_to_binary_(#x)

static inline unsigned long long S_to_binary_(const char *s)
{
    unsigned long long i = 0;
    while (*s) {
        i <<= 1;
        i += *s++ - '0';
    }
    return i;
}

int main()
{
    int foo = B(001100101);

    printf("%d\n", foo);

    return 0;
}

已使用编译clang -o baz.S baz.c -Wall -O3 -S,并生成了以下程序集:

    .section    __TEXT,__text,regular,pure_instructions
    .globl  _main
    .align  4, 0x90
_main:                                  ## @main
    .cfi_startproc
## BB#0:
    pushq   %rbp
Ltmp2:
    .cfi_def_cfa_offset 16
Ltmp3:
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
Ltmp4:
    .cfi_def_cfa_register %rbp
    leaq    L_.str1(%rip), %rdi
    movl    $101, %esi               ## <= This line!
    xorb    %al, %al
    callq   _printf
    xorl    %eax, %eax
    popq    %rbp
    ret
    .cfi_endproc

    .section    __TEXT,__cstring,cstring_literals
L_.str1:                                ## @.str1
    .asciz   "%d\n"


.subsections_via_symbols

So clang完全消除了对函数的调用,并将其返回值替换为101。整洁吧?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用C代码编写二进制数字系统[重复] 的相关文章

  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 将类型变量传递给函数

    我试图通过将类型传递给函数来实现类型断言 换句话说 我正在努力实现这样的目标 Note that this is pseudocode because Type isn t the valid thing to use here func
  • “实现 deps.support.app_compat”中的“deps”是什么?

    我正在寻找新架构组件的谷歌示例 我在其中找到了如下代码 dependencies Support libraries implementation deps support app compat implementation deps su
  • 如何处理 Windows 的 ReadDirectoryChangesW() 及其混合长/短文件名输出?

    我正在开发一段 C 代码 它使用 ReadDirectoryChangesW 来监视 Windows 中目录下的更改 我已阅读有关 ReadDirectoryChangesW 和 FILE NOTIFY INFORMATION 结构的相关
  • 打字稿,如何将对象传递给类的构造函数进行实例化

    我有一个从后端 api 获取的数组对象数据 喜欢 name react age 4 name angular age 4 name rxjs age 2 我确定一个class and an interface 像这样 interface I
  • 另一个函数中的 C 函数声明

    谁能向我解释一下这些行 int xyz void extern void abc void 函数定义中的函数声明 或者我误解了什么 是的 你的猜测是正确的 它声明了该函数的存在abc 因此可以在其中引用xyz 请注意 extern是不必要的
  • 你能在.NET MVC模板中使用bootstrap 4制作Visual Studio脚手架等吗?

    当您在 vs17 中创建新项目时 c 中的基本 mvc net Web 应用程序 它附带了 bootstrap 3 这意味着所有的脚手架页面和设计都是错误的 因为它们修改了列大小调整系统 有没有什么方法可以更新 VS 以便在将项目更新为 b
  • int((0.1+0.7)*10) = 7 在多种语言中。如何防止这种情况发生?

    最近我遇到了多种语言的错误 功能 我对它是如何引起的有非常基本的了解 并且我想要一些详细的解释 但是当我想到这些年来我必须犯的所有错误时 问题是我如何确定 嘿 这可能会导致一个可笑的错误 我最好使用任意精度函数 还有哪些其他语言有这个错误
  • GitHub:企业接收后挂钩

    有谁知道 GitHub Enterprise 中是否有一种机制来设置一个通用的接收后挂钩 该挂钩将适用于所有存储库 包括创建后的新存储库 我正在尝试开发一个到辅助系统的链接 该系统希望收到所有存储库的所有推送的通知 并且需要为每个新存储库进
  • wicket @SpringBean 无法创建 bean

    我有一个关于 Eclipse Wicket Spring Hibernate 的项目 一切正常 除了 当我尝试时 public class SortableContactDataProvider extends SortableDataPr
  • 如何检查两个布尔值是否相等?

    我需要一个可以在 junit 中调用的方法assertTrue 方法比较两个布尔值以检查它们是否相等 并返回一个布尔值 例如 这样的事情 boolean isEqual Boolean equals bool1 bool2 如果它们不相等则
  • 将鼠标悬停在按钮上时文本颜色发生变化

    我正在尝试更改悬停时按钮内文本的颜色 我可以使按钮本身改变颜色 但我希望按钮文本也改变颜色 这是我当前的CSS button input button a button input type submit background 2e77ae
  • 通过 CLI 运行 Codeigniter 会输出网站根目录而不是预期结果

    我正在跟进本教程通过 CLI 运行 Codeigniter 我已经做了他们所做的一切 复制并粘贴 现在 当我运行此命令时 除了输出网站索引内容之外 它不会执行预期的操作 cd Users MyUsername Sites code php
  • 调用 ruby​​ 方法而不实例化类

    如果我像这样调用 Rails 活动模型方法上的方法 class Foo lt ActiveRecord Base end Foo first 我将取回第一个活动记录 我不必实例化该类 但是如果我创建自己的类并调用方法 则会出现异常 clas
  • Xcode 6 删除应用程序组

    我需要删除一些App Groups我创建的目的是为了在应用程序和它的 Today 扩展之间共享信息 有谁知道如何删除App Group在功能部分创建Xcode in App Groups 删除应用程序组的步骤如下 登录到苹果开发者使用您的开
  • 奥利奥中未显示通知

    普通通知生成器不会在 Android O 上显示通知 如何在 Android 8 Oreo 上显示通知 是否需要添加任何新代码来在 Android O 上显示通知 在 Android O 中是必须使用渠道与您的通知生成器 下面是示例代码 S
  • 在 powershell 中打开控制台应用程序

    我目前正在开发一个 win32 控制台应用程序 想知道是否有任何方法可以让 Visual Studio 在调试它时在 powershell 而不是 cmd exe 中打开它 我真正想要的是一个更好的外壳 我可以在其中复制 粘贴等 而无需单击
  • 如何在下一个 jupyter 单元中重用绘图[重复]

    这个问题在这里已经有答案了 我有一个 jupyter 笔记本 希望在一个单元格中创建一个绘图 然后编写一些 Markdown 来在下一个单元格中进行解释 然后设置限制并在下一个单元格中再次绘图 到目前为止 这是我的代码 matplotlib
  • 单个 Django 项目下的多个站点

    在单个 django 项目下拥有多个站点是否可能且正确 这样 所有站点就会有全局共享的坐在文件 url 文件以及全局共享的 应用程序 并且单个 django 项目下的所有站点都有一个通用的管理界面 每个站点可能有自己的设置 url 和模板
  • 在 VB.NET 中获取 SQL Server 表中的行数

    有 10 行primary student table 当我执行下面的代码时 结果是 1 Dim count As Int16 con Open query SELECT COUNT roll AS rollcount FROM prima
  • 用C代码编写二进制数字系统[重复]

    这个问题在这里已经有答案了 当我们使用0x十六进制数字的前缀 以及0对于八进制数 对于二进制数有什么可以做的吗 我尝试过b后缀 但是GCC不允许 错误 整数常量上的后缀 b 无效 是否可以 标准 C 没有定义二进制常量 不过有一个 GNU