Main Content

bitshift

지정된 개수의 위치만큼 비트 시프트

설명

예제

intout = bitshift(A,k)k비트만큼 왼쪽으로 시프트된 A를 반환합니다. 이는 2k를 곱하는 것과 같습니다. 음의 k 값은 비트를 오른쪽으로 시프트하거나, 2|k|로 나누어 음의 무한대에 가장 가까운 정수로 반올림하는 것과 같습니다. 오버플로 비트는 잘립니다.

  • A가 부호 있는 정수로 구성된 배열이면 bitshift는 산술 시프트 결과를 반환하며, k가 음수일 경우 부호 있는 비트를 보존하고 k가 양수일 경우 부호 있는 비트를 보존하지 않습니다.

  • k가 양수이면 MATLAB®에서는 비트를 왼쪽으로 시프트하고 오른쪽에 0 비트를 k개 삽입합니다.

  • k가 음수이고 A가 음수가 아니면 MATLAB에서는 비트를 오른쪽으로 시프트하고 왼쪽에 0비트를 |k|개 삽입합니다.

  • k가 음수이고 A가 음수이면 MATLAB에서는 비트를 오른쪽으로 시프트하고 왼쪽에 1비트를 |k|개 삽입합니다.

예제

intout = bitshift(A,k,assumedtype)A의 유형이 assumedtype인 것으로 가정합니다.

예제

모두 축소

0이 아닌 모든 비트가 오버플로할 때까지 부호 없는 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

bitorbitshift를 사용하여 4개의 8비트 바이트를 이들이 구성하는 32비트 정수로 결합합니다.

4개의 데이터 바이트를 만듭니다. 16진수 리터럴을 사용하여 데이터를 지정합니다. 이때 데이터를 uint32로 저장해야 함을 지정하기 위해 -u32 접미사를 사용합니다. 각 바이트는 8비트에 해당하는 데이터를 포함합니다.

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

먼저 첫 번째 바이트를 부호 없는 32비트 정수의 첫 번째 8비트로 추가합니다.

packedNum = byte1;

다음으로, 나머지 3개의 바이트를 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

입력 인수

모두 축소

입력값으로, 배열로 지정됩니다. Ak와 동일한 크기의 스칼라이거나 배열일 수 있습니다.

  • A가 double형 배열이고 assumedtype이 지정되지 않은 경우 MATLAB에서는 A를 부호 없는 64비트 정수로 처리합니다.

  • assumedtype이 지정된 경우 A의 모든 요소는 assumedtype 범위 내의 정수 값을 가져야 합니다.

데이터형: double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

시프트할 비트 수로, 정수 또는 정수형 배열로 지정됩니다. kA와 동일한 크기의 스칼라이거나 배열일 수 있습니다.

데이터형: double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

A의 가정 데이터형으로, 'uint64', 'uint32', 'uint16', 'uint8', 'int64', 'int32', 'int16', 'int8' 중 하나로 지정됩니다.

  • A가 정수형 배열이면 assumedtype에 동일한 정수형이 지정되어야 합니다.

  • A가 double형 배열이면 assumedtype에 모든 유효한 정수형을 지정할 수 있습니다.

데이터형: char | string

출력 인수

모두 축소

시프트된 값으로, 배열로 반환됩니다. intoutA와 데이터형이 같습니다.

  • Ak가 스칼라이면 intout도 스칼라입니다.

  • Ak 중 하나가 배열이면 intout은 그 배열과 크기가 같습니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨

참고 항목

| | | | | |