Измените dec2bin в matlab, чтобы получить логический вектор

Я ищу быстрый способ получить вариацию dec2bin в Matlab, чтобы он возвращал вектор логической переменной. Например, если задано число n=8, выход будет [1,0,0,0]. Как я могу это сделать?

3 ответа

Самый простой способ - просто взорвать двоичное представление, возвращаемое dec2bin (которое уже является строкой!):

dec2bin(n) == '1'

Для n = 8 возвращает логический вектор

1 0 0 0

Это также будет работать, если n - вектор чисел.


Так как строка '1' - это char (49), а строка '0' - это char (48), вы можете использовать:

bin = dec2bin(dec) - 48;

Этот результат выведет результат как массив удвоений, так как вы выполняете арифметическую операцию над массивом (строка, идущая из "dec2bin", считается массивом в Matlab)

Если вы хотите преобразовать очень большие целые числа в двоичные, я рекомендую использовать этот код:

bin = mod(floor(dec.*2.^-(floor(log2(dec)):-1:0)),2);

Чтобы преобразовать двоичный вектор в десятичный:

dec = sum(bin.*2.^((length(bin)-1):-1:0));


Не используйте dec2bin, вместо bitget:

bitget(n, fix(log2(n)) + 1:-1:1)

P.S: Если у вас есть массив чисел, и вы хотите, чтобы его двоичное представление являлось матрицей битов, вы можете посмотреть этот связанный вопрос.

Пример

n = 8
b = bitget(n, fix(log2(n)) + 1:-1:1)

Это приводит к:

b =
 1 0 0 0

licensed under cc by-sa 3.0 with attribution.