我在网上看到了一些代码,我正在尝试弄清楚它在做什么。特别是,我以前从未见过“ 1e”约定。
time_t currentTime;
time(¤tTime);
uint64_t currentTime = (uint64_t)currentTime * 1e6;
答案 0 :(得分:4)
即1e6,而不是le6,它表示1 * 10 ^ 6或1000000.0
这是科学计数法。
答案 1 :(得分:4)
在C中,1e6
的类型为double
,其值是10的1乘以6的幂。它等效于1000000.0
。
不要被其他答案所迷惑:1e6
与C中的1000000
的含义相同吗,因为1e6
的类型为{{1 }},而double
将具有某种整数类型。像1000000
这样的浮点类型和整数类型之间在行为上有很大差异。
在C11 specification(以及更早的版本)的“浮动常量”部分中定义了写数字double
的语法。有点像scientific notation。
答案 2 :(得分:2)
我在线上看到了一些代码,我正在尝试弄清它是什么 在做。特别是,我以前从未见过“ 1e”约定。
正如其他人所提到的,实际上1e6
是10 ^ 6的科学计数法,即1000000或更好地称为100万。但是正如David所提到的,在C语言中它实际上被视为double
,其值实际上是1000000.0
。
但是我觉得这些答案仅集中在您提供的特定代码段上,而不是整个代码段上,因此我想为您提供一些额外的上下文,因为您正在尝试确定代码的内容。代码正在执行。
对于这些行:
time_t currentTime;
time(¤tTime);
time
获取一个指针time_t
并对其进行操作,大概为此花费了一些时间。
由于实际上已经声明了currentTime
,所以下一行实际上是非法的,因此让我们进行一些小的修改:
uint64_t convertedTime = (uint64_t)currentTime * 1e6;
此行将time_t currentTime
转换为无符号64位整数,然后将其乘以1e6
或1000000.0
。对于单位转换,可能会这样做。例如,假设time
以微秒(1e-6
,10 ^ -6或.000001
的时间写成currentTime
,因此将其乘以1e6
给你几秒钟。我说这仅仅是因为这里似乎是单位转换,而不是因为我实际上知道 time
所做的事情(即,我在这里以面值获取代码)。>
答案 3 :(得分:1)
它是1e6
Math.pow(10, 6) == 1000000
的科学符号
/ *是的,您可以使用几乎任何任何标准编程语言(包括C * /
)来完成此操作