我在网上看到了一些代码,我正在尝试弄清楚它在做什么。特别是,我以前从未见过“1e”约定。
time_t currentTime;
time(¤tTime);
uint64_t currentTime = (uint64_t)currentTime * 1e6;
Run Code Online (Sandbox Code Playgroud)
Dop*_*nop 15
那是 1e6,不是 le6,它的意思是 1 * 10^6 或 1000000.0
它是科学记数法。
小智 6
我在网上看到了一些代码,我正在尝试弄清楚它在做什么。特别是,我以前从未见过“1e”约定。
正如其他人提到的,实际上,1e610^6 是 1000000 或更好地称为 100 万的科学记数法。但正如 David 已经提到的,这实际上double在 C 中被视为 a ,其值实际上是1000000.0。
但我觉得这些答案只关注您提供的特定代码片段,而不是整个代码,因此我想为您提供一些额外的上下文,因为您正在尝试弄清楚代码在做什么。
对于这些行:
time_t currentTime;
time(¤tTime);
Run Code Online (Sandbox Code Playgroud)
time获取一个指针time_t并对其进行操作,大概会向其写入一些类似的时间。
下一行实际上是非法的,因为currentTime已经声明了,所以让我们做一个小修改:
uint64_t convertedTime = (uint64_t)currentTime * 1e6;
Run Code Online (Sandbox Code Playgroud)
该行转换time_t currentTime为无符号 64 位整数,然后将其乘以1e6或1000000.0。这可能是为了单位转换而完成的。例如,假设以微秒( 、 10^-6 或) 为单位time写入时间,因此将其乘以秒数。我这么说只是因为这里似乎是单位转换,而不是因为我实际上知道做了什么(即我在这里按面值获取代码)。1e-6.000001currentTime1e6time