Самый эффективный способ преобразовать BCD в двоичный файл

async просто сахар для возврата обещания. Поэтому, когда вы говорите

async sleep_not_Working()
{
   setTimeout( ()=> {
        return "hello";
    }, 3000);
}

Это в основном то же самое, что и это:

function sleep_not_Working()
{
    return new Promise((resolve, reject) => {
        setTimeout( ()=> {
            return "hello";
        }, 3000);
    })       
}

Но это не так, как работают обещания. Возврат из внутренней анонимной функции не разрешает обещание, единственное, что разрешает обещание, это resolve('hello')

5
задан AShelly 20 January 2009 в 21:23
поделиться

5 ответов

Если у Вас есть пространство для экономии для 39 322 массивов элемента, Вы могли бы всегда просто искать значение.

8
ответ дан 18 December 2019 в 09:10
поделиться

Если Вы разворачиваете цикл, не забудьте сохранять сдвиг разряда.

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;
6
ответ дан 18 December 2019 в 09:10
поделиться

Ваш код кажется скорее сложным; Вы требуете определенной проверки ошибок?

Иначе Вы могли просто использовать следующий код, который не должен быть медленнее, на самом деле, это - главным образом то же:

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;
2
ответ дан 18 December 2019 в 09:10
поделиться

Я предполагаю, что Вы могли развернуть цикл:

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.

1
ответ дан 18 December 2019 в 09:10
поделиться

Конечно, есть более эффективный метод. это, конечно, всего лишь пример, так что вы можете настроить его как урок ^^

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;    

}

-1
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: