bitshift

Переключите конкретное количество битов мест

Описание

пример

intout = bitshift(A,k) возвращает A переключенный налево k биты, эквивалентные умножению на 2k. Отрицательные величины k соответствуйте сдвигу права битов или делению на 2|k| и округляясь до ближайшего целого числа к отрицательной бесконечности. Любые биты переполнения являются усеченными.

  • Если A массив целых чисел со знаком, затем bitshift возвращает результаты арифметического сдвига, сохраняя бит со знаком когда k отрицательно, и не сохранение бита со знаком когда k положительно.

  • Если k положительно, MATLAB® переключает биты налево и вставляет k 0 битов справа.

  • Если k отрицательно и A является неотрицательным, затем MATLAB переключает биты направо и вставляет |k| 0 битов слева.

  • Если k отрицательно и A отрицательно, затем MATLAB переключает биты направо и вставляет |k| 1 бит слева.

пример

intout = bitshift(A,k,assumedtype) принимает A имеет тип assumedtype.

Примеры

свернуть все

Неоднократно переключайте биты 8-битного значения без знака налево до всего ненулевого переполнения битов.

a = intmax('uint8');
s1 = 'Initial uint8 value %5d is %08s in binary\n';
s2 = 'Shifted uint8 value %5d is %08s in binary\n';
fprintf(s1,a,dec2bin(a))
Initial uint8 value   255 is 11111111 in binary
 for i = 1:8
    a = bitshift(a,1);
    fprintf(s2,a,dec2bin(a))
 end
Shifted uint8 value   254 is 11111110 in binary
Shifted uint8 value   252 is 11111100 in binary
Shifted uint8 value   248 is 11111000 in binary
Shifted uint8 value   240 is 11110000 in binary
Shifted uint8 value   224 is 11100000 in binary
Shifted uint8 value   192 is 11000000 in binary
Shifted uint8 value   128 is 10000000 in binary
Shifted uint8 value     0 is 00000000 in binary

Найдите сдвиг для номера с помощью различных принятых целочисленных типов.

uintout = bitshift(6,5:7,'uint8')
uintout = 1×3

   192   128     0

intout = bitshift(6,5:7,'int8')
intout = 1×3

   -64  -128     0

Используйте bitor и bitshift чтобы упаковать четыре 8-битных байта в 32-битное целое число, они составляют.

Создайте четыре байта данных. Задайте данные с шестнадцатеричными литералами, с помощью -u32 суффикс, чтобы указать, что данные должны храниться как uint32. Каждый байт содержит ценность на 8 битов данных.

byte4 = 0x87u32; 
byte3 = 0x65u32; 
byte2 = 0x43u32; 
byte1 = 0x21u32;

Запустите путем добавления первого байта как первых 8 битов 32-битного беззнакового целого.

packedNum = byte1;

Затем упакуйте другие три байта в packedNum, использование bitshift переключать байты к соответствующим местоположениям и bitor скопировать биты.

packedNum = bitor(packedNum,bitshift(byte2,8));
packedNum = bitor(packedNum,bitshift(byte3,8*2));
packedNum = bitor(packedNum,bitshift(byte4,8*3));

Просмотрите упакованное 32-битное целое число.

format hex
packedNum
packedNum = uint32
   87654321

Входные параметры

свернуть все

Входные значения в виде массива. A может быть скаляр или массив одного размера с k.

  • Если A двойной массив и assumedtype не задан, затем MATLAB обрабатывает A как 64-битное целое число без знака.

  • Если assumedtype задан, затем все элементы в A должен иметь целочисленные значения в области значений assumedtype.

Типы данных: double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Количество коммутируемых битов в виде целочисленного или целочисленного массива. k может быть скаляр или массив одного размера с A.

Типы данных: double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Принятый тип данных AВ виде 'uint64'uint32uint16uint8int64int32int16, или 'int8'.

  • Если A массив целочисленного типа, затем assumedtype должен задать тот же самый целочисленный тип.

  • Если A двойной массив, затем assumedtype может задать любой допустимый целочисленный тип.

Типы данных: char | string

Выходные аргументы

свернуть все

Переключенные значения, возвращенные как массив. intout совпадающий тип данных как A.

  • Если A и k скаляры, затем intout также скаляр.

  • Если любой A или k массив, затем intout одного размера с тем массивом.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

Смотрите также

| | | | | |

Представлено до R2006a