当前位置: 首页 > 知识库问答 >
问题:

使用UINT64_C的目的?

顾靖
2023-03-14

我在boost source中发现了这句话:

const boost::uint64_t m = UINT64_C(0xc6a4a7935bd1e995);

我想知道在这里使用宏的目的是什么?

这一个所做的就是将ULL添加到所提供的常量中。

我想它可能是用来让人们更难犯输入UL而不是ULL的错误,但我想知道是否还有其他原因使用它。

共有1个答案

轩辕涵亮
2023-03-14

如果你看一下boop/cstdint. h,你会发现UINT64_C宏的定义在不同的平台和编译器上是不同的。

在一些平台上,它被定义为value##uL,在另一些平台上,它被定义为value##uLL,而在另一些平台上,它被定义为value##ui64。这完全取决于该平台上无符号长无符号长的大小,或者是否存在特定于编译器的扩展。

我不认为在这种情况下使用UINT64_C实际上是必要的,因为文本0xc6a4a7935bd1e995已经被解释为64位无符号整数。但在其他情况下,这是必要的。例如,这里的文本0x00000000ffffffff将被解释为32位无符号整数,如果它不是通过使用UINT64_C专门指定为64位无符号整数(尽管我认为对于按位AND操作,它将被提升为UINT64_t)。

在任何情况下,在重要的地方明确声明文本的大小对于代码的清晰性都有重要作用。有时,即使一个操作完全由该语言定义,人类程序员也很难分辨出所涉及的类型。明确地说出它可以使代码更容易推理,即使它不会直接改变程序的行为。

 类似资料:
  • 我查看了文档,没有找到这样做的方法。有没有办法告诉gradle idea任务创建目录项目结构()而不是项目/模块文件()?

  • type String(可选) - 以下之一: tasks - 此类别中的项目将被放置到标准的 Tasks 类别中。只能有一个这样的类别而且总是显示在跳转列表的底部。 frequent - 显示由应用程序频繁打开的文件的列表,类别的名称及其项目由Windows设置。 recent - 显示由应用程序最近打开的文件的列表,类别的名称及其项目由Windows设置。项目可以使用app.addRecent

  • 我正在创建一个Java库,用于其他Java项目。这些项目使用Repast Symphony,我的库也使用Repast Symphony(所以我担心这个错误是由一些冲突引起的)。一切都很好,但当我运行Repast模拟时,它抛出了 我尝试将我的库导出为jar,直接导入项目并将库添加到项目的类路径,但没有成功。我做错了什么? 这个上下文类正在我的库和项目中使用。以下是它在两个类中的使用片段: 编辑以从评

  • 我正在经历spring项目,在一些模型类有类型 cascade={cascadetype.all} 写在参数中, @ManyToOne(fetch=FetchType.Eager,Cascade=CascadeType.All)@JoinColumn(name=“user_id”,nullable=false) 私人用户用户; 我的问题是,我们应该把这个用在什么目的上? 谢谢你。

  • 我是azure云服务平台的新手。今天我遇到了Azure提供的Key-Vault存储服务。它具有存储应用程序级密钥和设置的能力。它具有增强的数据保护功能,是安全可靠的。 但我不清楚的是,要连接到Key-Vault,我需要存储在应用程序配置中的Key-Vault的工件。 如果是这样的话,当有人在密钥值上掉线时,他不会连接到我的密钥库并读取我的所有密钥。 如果我应该加密我的本地密钥存储库设置,那么我可以

  • react新手今天刚刚看完react和react-router的文档.然后找一个别人推荐的react的项目来进一步学习,想问一下这个loginIn函数为什么要用useCallback来包裹一层? 查阅了官方文档对这个hook的解释 再仔细看了一下代码,loginIn只在onSubmit调用过,然后onSubmit传递给了一些子组件。感觉没有必要用useCallback来缓存loginIn的必要。但