C 或 C++ 中用于表现常量的后缀:1ULL [复制链接]
发表于 2025-11-3 18:48:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1ULL 是一个在 C 或 C++ 中用于表现常量的后缀,它详细指示编译器将这个数值视为特定范例的整数。让我们详细表明一下:
1ULL 的寄义


  • 1: 这是最根本的部门,表现数值 1。
  • U: 表现该数值是无符号(Unsigned)的。这意味着它只能表现非负数,而不能表现负数。
  • LL: 表现该数值是一个长整型(Long Long)。在大多数今世体系上,这代表64位整数。
因此,1ULL 表现的是一个64位无符号长整型数值 1。
为什么利用 1ULL

  1ULL << MOTOR_DRIVER_NUM_0 和 1ULL << MOTOR_DRIVER_NUM_1 利用了这种情势来确保移位操纵是在64位无符号整数范围内举行的。这黑白常告急的,由于:

  • 制止溢出:假如你利用的数值范例不敷大,大概会导致溢出标题。比方,在32位体系上,假如实验对一个32位整数举行凌驾31位的左移操纵,会导致未界说活动或错误。
  • 明白意图:通过利用 1ULL,你可以清楚地表明你渴望举行的操纵是在64位范围内举行的,这对于明白和维护代码很有资助。
示例

假设 MOTOR_DRIVER_NUM_0 和 MOTOR_DRIVER_NUM_1 分别为 5 和 10,那么:
  1. 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引脚。
如许做的长处是增长了代码的结实性和可移植性,特别是在处理惩罚差别平台或架构时。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表