用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代码编写二进制数字系统[重复] 的相关文章

  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler

随机推荐

  • 将类型变量传递给函数

    我试图通过将类型传递给函数来实现类型断言 换句话说 我正在努力实现这样的目标 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