exponenta event banner

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++ с помощью MATLAB ® Coder™

.

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

.

См. также

| | | | | |

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