비트 시프트 예제

서명되지 않은 8비트 값의 비트를 모든 비영점 비트가 오버플로될 때까지 반복적으로 왼쪽으로 이동합니다. 또한 C와 C++는 올바른 시프트 연산자와 구별되지 않습니다. 그들은 단지 >> 연산자 제공 하 고 오른쪽 이동 동작은 서명 된 형식에 대 한 정의 된 구현. 나머지 답변은 C # / Java 연산을 사용합니다. 좌측 교대 연산자의 기호는 <<입니다. 오른쪽 오퍼랜드에 의해 표시된 위치 수에 따라 왼쪽 에 있는 각 비트를 왼쪽으로 이동합니다. 그것은 오른쪽 시프트 연산자의 반대 작동합니다. 따라서 위의 예제에서 ch << 1을 수행하 여 11001010을 가지고 있습니다. 생성된 빈 공백은 위와 같이 0으로 채워집니다.

다음 예제에서는 서명되지 않은 숫자를 사용하여 좌근 교대 작업을 보여 주습니다. 이 예제에서는 값을 비트 집합으로 표시하여 비트에 어떤 일이 일어나고 있는지 보여 주며, 이 예제에서는 비트집합을 보여 주며, 비트에 어떤 일이 일어나고 있는지 를 보여 주며, 이 예제에서는 비트를 표시합니다. 자세한 내용은 비트 집합 클래스를 참조하십시오. 아래 설명에서 비트 의 위치 표시는 오른쪽 (가장 중요하지 않은) 쪽에서 왼쪽으로 진행됩니다. 예를 들어 이진 값 0001(소수점 1)은 모든 위치에서 0을 가지지만 첫 번째 위치는 0입니다. 이 것들은 원형 교대가 아닙니다. 이 값을 한 위치로 왼쪽으로 이동(3,758,096,384 << 1): 비트 이동을 포함한 Bitwise 작업은 하위 수준의 하드웨어 또는 임베디드 프로그래밍의 기본입니다. 장치 또는 일부 이진 파일 형식에 대한 사양을 읽는 경우 다양한 관심 값을 포함하는 바이트, 단어 및 검이 바이트가 아닌 정렬 된 비트 필드로 나누어 표시됩니다.

읽기/쓰기를 위해 이러한 비트 필드에 액세스하는 것이 가장 일반적인 사용법입니다. << (왼쪽 시프트) 두 개의 숫자를 취하고, 왼쪽은 첫 번째 오연자의 비트를 이동하고, 두 번째 진연은 이동할 장소의 수를 결정한다. 또는 정수 "x"를 정수 "y"(x<y)로 이동하면 x에 2^y(2 키즈하여 y로 올리기)를 곱하는 것과 같습니다. 산술 오른쪽 시프트는 0으로 패딩 대신 가장 중요한 비트로 패드를 제외하고 논리적 오른쪽 시프트와 정확히 같습니다. 가장 중요한 비트는 부호 비트 또는 양수와 음수를 구별하는 비트이기 때문입니다. 가장 중요한 비트의 패딩을 사용하면 산술 오른쪽 시프트가 기호 보존입니다. 1 C++11 ISO 사양(INCITS/ISO/IEC 14882-2011[2012]), 섹션 5.8.2 및 5.8.3의 교대 작업자에 대한 설명은 다음과 다. C#에서 오른쪽 시프트는 첫 번째 방사판이 int 또는 긴 경우 산술 교대입니다. 첫 번째 피연산자가 uint 또는 ulong 형식인 경우 오른쪽 시프트는 논리적 시프트입니다.

[5] 비트별 시프트 연산자는 시프트 식의 비트를 오른쪽으로 이동하는 오른쪽 시프트 연산자(>)와 시프트 식비트를 왼쪽으로 이동하는 왼쪽 시프트 연산자(<<)입니다. 1 "끝에서 벗어난" 이동되는 숫자가 손실됩니다. 그것은 주위에 감싸지 않습니다. 첫 번째 경우 가장 왼쪽 숫자는 레지스터의 끝을 지나 이동되고 새 0은 오른쪽 위치로 이동되었습니다. 두 번째 경우, 오른쪽 1은 (아마도 캐리 플래그로) 밖으로 이동하고, 새로운 1은 숫자의 기호를 유지, 왼쪽 번째 위치로 복사되었다. 여러 교대조가 일부 숫자로 단일 교대조로 단축되는 경우도 있습니다. 예를 들어 보시다시피 숫자는 한 위치로 왼쪽으로 이동하고 오른쪽의 마지막 숫자는 0으로 채워집니다. 또한 왼쪽을 이동하는 것은 2의 힘을 곱하는 것과 동일하다는 것을 확인할 수 있습니다. 따라서 6 << 1은 6 * 2에 해당하고 6 << 3은 6 * 8에 해당합니다. 가산식 비트 이동은 이진 값의 모든 비트에서 수행되는 작업으로, 결정된 수의 위치에서 왼쪽 또는 오른쪽으로 이동됩니다.