为什么要在C中写1000,000,000 1000 * 1000 * 1000?

在由Apple创建的代码中,有以下行:

CMTimeMakeWithSeconds( newDurationSeconds, 1000*1000*1000 )

有没有任何理由将1,000,000,000 1000*1000*1000

为什么不是1000^3呢?


以乘法方式声明常量的一个原因是为了提高可读性,而运行时性能不受影响。 此外,为了表明作者正在乘数地思考这个数字。

考虑这个:

double memoryBytes = 1024 * 1024 * 1024;

这显然比:

double memoryBytes = 1073741824;

因为后者乍看之下并不看1024的第三个威力。

正如Amin Negm-Awad提到的那样, ^运算符是二元XOR 。 许多语言缺少内置的编译时指数运算符,因此不需要乘法运算。


为什么不是1000^3

1000^3的结果是1003. ^是位XOR算子。

即使它不处理Q本身,我补充说明。 x^y并不总是像提问者的例子那样评价为x+y 。 你必须尽一切努力。 在这个例子的情况下:

1111101000₂ (1000₁₀)
0000000011₂ (3₁₀)
1111101011₂ (1003₁₀)

1111101001₂ (1001₁₀)
0000000011₂ (3₁₀)
1111101010₂ (1002₁₀)

有理由不要使用1000 * 1000 * 1000

使用16位int1000 * 1000溢出。 所以使用1000 * 1000 * 1000降低了可移植性。

使用32位int ,以下溢出。

long long Duration = 1000 * 1000 * 1000 * 1000;  // overflow
long long Duration = 1000000000000;  // no overflow, hard to read

建议引导值与目标的可读性,可移植性和正确性的类型相匹配。

double Duration = 1000.0 * 1000 * 1000;
long long Duration = 1000LL * 1000 * 1000 * 1000;

也可以简单地使用e符号来表示可以完全表示为double 。 当然,这导致了解double可以精确地表示整个数值 - 值得关注的值大于1e9。 (请参阅DBL_EPSILONDBL_DIG )。

long Duration = 1000000000;
// vs.
long Duration = 1e9;
链接地址: http://www.djcxy.com/p/85715.html

上一篇: Why write 1,000,000,000 as 1000*1000*1000 in C?

下一篇: Will strlen be calculated multiple times if used in a loop condition?