当前位置: 首页 > article >正文

C 或 C++ 中用于表示常量的后缀:1ULL

1ULL 是一个在 C 或 C++ 中用于表示常量的后缀,它具体指示编译器将这个数值视为特定类型的整数。让我们详细解释一下:

1ULL 的含义

  • 1: 这是最基本的部分,表示数值 1
  • U: 表示该数值是无符号(Unsigned)的。这意味着它只能表示非负数,而不能表示负数。
  • LL: 表示该数值是一个长整型(Long Long)。在大多数现代系统上,这代表64位整数。

因此,1ULL 表示的是一个64位无符号长整型数值 1

为什么使用 1ULL

  1ULL << MOTOR_DRIVER_NUM_01ULL << MOTOR_DRIVER_NUM_1 使用了这种形式来确保移位操作是在64位无符号整数范围内进行的。这是非常重要的,因为:

  • 避免溢出:如果你使用的数值类型不够大,可能会导致溢出问题。例如,在32位系统上,如果尝试对一个32位整数进行超过31位的左移操作,会导致未定义行为或错误。
  • 明确意图:通过使用 1ULL,你可以清楚地表明你希望进行的操作是在64位范围内进行的,这对于理解和维护代码很有帮助。

示例

假设 MOTOR_DRIVER_NUM_0MOTOR_DRIVER_NUM_1 分别为 510,那么:

io_conf.pin_bit_mask = ((1ULL << MOTOR_DRIVER_NUM_0) | (1ULL << MOTOR_DRIVER_NUM_1));

这段代码的效果如下:

  • 1ULL << MOTOR_DRIVER_NUM_0 相当于 1ULL << 5,结果是 0x20(即二进制的 000...00100000)。
  • 1ULL << MOTOR_DRIVER_NUM_1 相当于 1ULL << 10,结果是 0x400(即二进制的 000...010000000000)。

然后使用按位或操作符 | 将这两个值合并,得到最终的 pin_bit_mask 值为 0x420(即二进制的 000...010000100000),表示引脚5和引脚10被设置为高电平。

总结

  • 1ULL 是一个64位无符号长整型数值 1
  • 使用 1ULL 可以确保在进行位操作时不会发生溢出,并且能够处理需要较大数值范围的情况。
  • 在你的代码中,1ULL 确保了位移操作的结果足够大,可以正确地配置多个GPIO引脚。

这样做的好处是增加了代码的健壮性和可移植性,特别是在处理不同平台或架构时。


http://www.kler.cn/a/521332.html

相关文章:

  • C++从入门到实战(二)C++命名空间
  • 【信息系统项目管理师-选择真题】2016上半年综合知识答案和详解
  • 第三十一周学习周报
  • 计算机图形学试题整理(期末复习/闭or开卷/>100道试题/知识点)
  • 塔罗牌(基础):大阿卡那牌
  • 2025美赛数学建模C题:奥运金牌榜,完整论文代码模型目前已经更新
  • 用C++编写一个2048的小游戏
  • 【2024年华为OD机试】(A卷,100分)- 识图谱新词挖掘 (JavaScriptJava PythonC/C++)
  • python的设计模式
  • 【miniconda】:langraph的windows构建
  • windows蓝牙驱动开发-生成和发送蓝牙请求块 (BRB)
  • 10 外观(Facade)模式
  • 基于先验领域知识的归纳式多实例多标签学习用于牙周病分类| 文献速递 -医学影像人工智能进展
  • 【Django DRF Apps】【文件上传】【断点上传】从零搭建一个普通文件上传,断点续传的App应用
  • 游戏策划的分类
  • 性能测试丨JVM 性能数据采集
  • 【2024年华为OD机试】 (C卷,100分)- 爱吃蟠桃的孙悟空(JavaScriptJava PythonC/C++)
  • SpringSecurity相关面试试题及答案解析
  • Flutter解决macbook M芯片Android Studio中不显示IOS真机的问题
  • 【漫话机器学习系列】062.向前逐步选择法(Forward Stepwise Selection)