async
просто сахар для возврата обещания. Поэтому, когда вы говорите
async sleep_not_Working()
{
setTimeout( ()=> {
return "hello";
}, 3000);
}
Это в основном то же самое, что и это:
function sleep_not_Working()
{
return new Promise((resolve, reject) => {
setTimeout( ()=> {
return "hello";
}, 3000);
})
}
Но это не так, как работают обещания. Возврат из внутренней анонимной функции не разрешает обещание, единственное, что разрешает обещание, это resolve('hello')
Если у Вас есть пространство для экономии для 39 322 массивов элемента, Вы могли бы всегда просто искать значение.
Если Вы разворачиваете цикл, не забудьте сохранять сдвиг разряда.
value = ( lo & 0xF);
value += ((lo >> 4 ) & 0xF) * 10;
value += ((lo >> 8 ) & 0xF) * 100;
value += ((lo >> 12) & 0xF) * 1000;
value += ( hi & 0xF) * 10000;
value += ((hi >> 4 ) & 0xF) * 100000;
value += ((hi >> 8 ) & 0xF) * 1000000;
value += ((hi >> 12) & 0xF) * 10000000;
Ваш код кажется скорее сложным; Вы требуете определенной проверки ошибок?
Иначе Вы могли просто использовать следующий код, который не должен быть медленнее, на самом деле, это - главным образом то же:
uint result = 0;
uint multiplier = 1;
uint value = lo | hi << 0x10;
while (value > 0) {
uint digit = value & 0xF;
value >>= 4;
result += multiplier * digit;
multiplier *= 10;
}
return result;
Я предполагаю, что Вы могли развернуть цикл:
value = ( lo & 0xF);
value+= ((lo>>4) & 0xF) *10;
value+= ((lo>>8) & 0xF) *100;
value+= ((lo>>12)& 0xF) *1000;
value+= ( hi & 0xF) *10000;
value+= ((hi>>4 & 0xF) *100000;
value+= ((hi>>8) & 0xF) *1000000;
value+= ((hi>>12)& 0xF) *10000000;
И можно проверить на недопустимые цифры BCD как это:
invalid = lo & ((lo&0x8888)>>2)*3
Это устанавливает недопустимый на ненулевое значение если любая единственная шестнадцатеричная цифра> 9.
Конечно, есть более эффективный метод. это, конечно, всего лишь пример, так что вы можете настроить его как урок ^^
function bcd_to_bin ($bcd) {
$mask_sbb = 0x33333333;
$mask_msb = 0x88888888;
$mask_opp = 0xF;
for($i=28;$i;--$i) {
$mask_msb <<= 1;
$mask_opp <<= 1;
$mask_sbb <<= 1;
for($j=0;$j<$i;$j+=4) {
$mask_opp_j = $mask_opp << $j;
if ($bcd & $mask_msb & $mask_opp_j ) {
$bcd -= $mask_sbb & $mask_opp_j;
}
}
}
return $bcd;
}