Решения из этого связанного вопроса (характерные для целых чисел без знака) могут быть изменены для обработки целого числа со знаком.Самый простой подход - преобразовать вывод оттуда в uint32
, а затем преобразовать в int32
, используя typecast
.Опираясь на это решение :
>> a = [0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1 1 1 1 0 0 0];
>> b = typecast(uint32(sum(pow2(find(a)-1))), 'int32')
b =
int32
521688984
Если вы знаете конкретное представление , используемое для битовой комбинации (мое предположение будет дополнением до двух ), вы могли бы избежать использования typecast
, учитывая знаковый бит и дополнять непосредственно в вычислениях.
Если a
является матрицей N-32, вы можете простозамените sum(...)
на векторизованные вычисления из связанного решения:
b = typecast(uint32(a*(2.^(0:size(a, 2)-1)).'), 'int32');