【发布时间】:2020-11-17 00:36:03
【问题描述】:
我需要整数(无符号字节)的二进制代码表示。我找到了this solution,在我的情况下是$n = 8:
function _decBinDig($x, $n)
{
return substr(decbin(pow(2, $n) + $x), 1);
}
这令人惊讶地花费了大约 74 毫秒,而我的第一次尝试 - 我认为太慢了:
function getBinary(int $x)
{
return str_pad(base_convert($x, 10, 2), 8, '0', STR_PAD_LEFT);
}
只需要大约 38 毫秒
有更快的解决方案吗?
【问题讨论】:
-
$st=""; while($n>0){ $st = ($n%2) . $st; $n=intval($n/2); } echo $st;。不知道你是怎么计时的。你可以试试这个并在这里告诉我。在此先感谢:) -
$startTime = microtime(true); getBinary(89); $endTime = microtime(true); $elapsed = round(($endTime - $startTime) * 1000000, 2); echo "Execution time : $elapsed ms"; -
这种方法比
getBinary()慢一些,并且不会产生所需的八个字符 -
对我来说,所有 3 个解决方案(您的 2 个解决方案和下面答案中的一个)需要 1.4 到 1.6 毫秒来解决。运行每个解决方案 1000 次并重复任务 5 次。我考虑了平均时间、最短时间和最长时间,对于哪个最快,我得到了不同的结果。我认为这个问题太微不足道了,而且这些数字太低而无法在常规环境中进行基准测试,因为结果会受到测试期间在后台运行的其他应用程序导致的 CPU 负载的高度影响。
-
我的意思是,如果你想优化它,你可能会考虑优化你的硬件而不是软件。