3 回答

TA贡献1796条经验 获得超4个赞
与其一次一个位地回显结果,不如通过在左侧添加新值来构建一个字符串:
<?php
function decToBin($int) {
$roundInt = intval($int) * 2;
$output = '';
while ($roundInt > 1) {
$result = intval($roundInt = $roundInt / 2);
if ($result % 2 == 0) {
$result = 0;
} else {
$result = 1;
}
$output = $result . $output;
}
echo $output;
}

TA贡献1865条经验 获得超7个赞
只是你在这里做错了几件事:
您有一个舍入错误(使用
intdiv
进行整数除法,而不是您正在执行的操作,这会产生复合效应)。指定实际的类型隐藏而不是强制转换(确保类型安全)
从函数返回实际值,不输出(保留对其最终组合的控制)
以下是您的函数的实际外观...
function decToBin(Int $int): String {
$bin = ""; // Initialize the return value
$roundInt = $int * 2;
while ($roundInt > 1) {
$roundInt = $result = intdiv($roundInt, 2); // Safe integer division
$result &= 1;
$bin = $result . $bin; // Compose with byte endianness at LSB first
}
return $bin;
}
var_dump(decToBin(123));
现在您得到实际的正确结果...
string(7) "1111011"

TA贡献1803条经验 获得超3个赞
我对现有代码进行了最小的更改,而无需更改方法。您可以使用 strrev 函数来反转输出。这里,数据被附加到$return_data,它返回并存储在$returned_data中,然后使用strrev预定义函数。
function decToBin($int) {
$roundInt = intval($int) * 2;
$return_data ='';
while ($roundInt > 1) {
$result = intval($roundInt = $roundInt / 2);
if ($result % 2 == 0) {
$result = 0;
} else {
$result = 1;
}
$return_data .=$result; //Data appending
}
return $return_data; //returns
}
$returned_data = decToBin(123);
echo strrev($returned_data); //reverse function
- 3 回答
- 0 关注
- 125 浏览
添加回答
举报