为什么要在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位int
, 1000 * 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_EPSILON
和DBL_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?