Преобразовать битовый оператор VBA в C # - PullRequest
0 голосов
/ 03 мая 2018

У меня есть побитовые операции в VBA, и теперь я хочу преобразовать это в C #.

Я пытался выполнить преобразование с использованием побитовых операторов C #, но я не получил результат.

битовые операции VBA

Bit1 = (Var1 And 2 ^ 14) Or (Var1 And 2 ^ 15)

C # Битовые операции

var Bit1 = (bitvalue >> 14) | (bitvalue >> 15);

Поскольку в VBA нет операторов сдвига битов, мы используем 2 ^ места для сдвига вправо, а в C # мы можем просто использовать >> для оператора сдвига вправо, но это не дает мне результат, который я получаю в VBA. В чем может быть причина?

Это моя полная функция на C # и она похожа на VBA:

public void bitcalc()
{


    var Bit1 = (bitvalue >> 14) | (bitvalue >> 15);
    if (Bit1 == 16384) getISO15031BitsLetter = "C";

    else if (Bit1 == 32768) getISO15031BitsLetter = "B";


    else if (Bit1 == 49152) getISO15031BitsLetter = "U";


    else getISO15031BitsLetter = "P" ;


}

1 Ответ

0 голосов
/ 03 мая 2018

Ваш исходный код не сдвигает ввод. Это только маскирует это. Прямой перевод может быть:

var Bit1 = (Var1 & (1 << 14)) | (Var1 & (1 << 15));

Есть несколько вариантов этого. Например, вы можете замаскировать оба бита одновременно:

var Bit1 = (Var1 & (3 << 14)); // decimal 3 is binary 11
...