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', 'uint32', 'uint16', 'uint8', 'int64', 'int32', 'int16', или 'int8'.

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

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

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

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

свернуть все

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

  • Если A и k скаляры, тогда intout также является скаляром.

  • Если либо A или k является массивом, тогда intout - тот же размер, что и этот массив.

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

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

.

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

.

См. также

| | | | | |

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