【问题标题】:How to print lld in Lua 5.3如何在 Lua 5.3 中打印 lld
【发布时间】:2015-03-14 03:48:12
【问题描述】:
string.format (formatstring, ···)

根据第一个参数(必须是字符串)中给出的描述,返回其可变数量参数的格式化版本。格式字符串遵循与 ISO C 函数 sprintf 相同的规则。唯一的区别是不支持选项/修饰符*, h, L, l, n, and p,并且有一个额外的选项q

Lua 5.3 不支持lld,如何在Lua 5.3 中打印lld

【问题讨论】:

  • 您已将问题修改为其他问题。在 C 中,long longunsigned long longuint64 是三种不同的类型,不清楚你在问什么。我已经把它回滚了。如果您有新问题,请提出新问题。

标签: lua string.format lua-5.3


【解决方案1】:

简答:使用%d


在 C sprintf 中,%lld 用于格式化 long long 类型,它是至少 64 位的整数类型。

在 Lua 5.3 中,number 类型有两种内部表示,整数和浮点数。在标准 Lua 中,整数表示是 64 位的。无论其内部表示如何,您都可以使用%d 打印它:

print(string.format("%d", 2^62))

输出:4611686018427387904


在 Lua 源文件 luaconf.h 中,您可以看到 Lua 将 %d 转换为适当的格式:

#define LUA_INTEGER_FMT     "%" LUA_INTEGER_FRMLEN "d"

如果使用不同的整数内部表示,则LUA_INTEGER_FRMLEN 定义为"""l""ll"

#if defined(LLONG_MAX)      /* { */
/* use ISO C99 stuff */
#define LUA_INTEGER     long long
#define LUA_INTEGER_FRMLEN  "ll"
//...

【讨论】:

  • “格式”的错误参数 #2(数字没有整数表示)
  • print(string.format("%d", 9223372036854775807)) assert( 2^63 == 9223372036854775807 ) print(string.format("%d", 2^63)) -- 不好'format' 的参数 #2(数字没有整数表示)为什么?
  • @Sleepwom 在有符号的 64 位中可以表示的最大数字是 2^63 - 1,请阅读 Wikipedia
  • 如何打印无符号64位?
  • 使用string.format( "%u", 1 << 63 )。不要使用^ 运算符创建大整数(因为它不会创建整数而是浮点数)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 2022-10-23
  • 2020-04-21
相关资源
最近更新 更多