2017-09-08 6 views
1

< < 및 >> 연산자에 대해 알아야 할 배경과 해결 방법은 무엇입니까? 그래서 나는 그들을 사용하여 나의 미래의 문제를 해결할 생각을 시작할 수 있습니다.왼쪽 이동 << 및 오른쪽 shift >> 연산자의 실제 적용

언제 나는 그 연산자가 포함 된 코드/논리를 볼 수 있습니다. 나는 코드/로직을 피하기 시작할 것이다. 오디오 또는 비디오 처리 라이브러리에서 주로 보았습니다.

제 두려움에서 벗어나도록 도와주십시오.

답변

1

이들 중 하나를 즉시 사용하려면 2를 곱하면됩니다. 이전에는 두 번 씩 곱하는 것보다 왼쪽 쉬프트가 빠르기 때문에 성능 기술이었습니다 (비디오 처리에 사용되는 이유 중 하나 일 수 있습니다).

내가 최근 사실, 비트 플래그, 그들이 공연을하기 위해, 내 C# 코드에서 플래그를 정의하는 데 사용하기 시작했습니다

[Flags] 
enum myFlags { 
    undefined = 0, 
    smallest = 1, 
    next_smallest = smallest << 1 
} 
+0

숫자 << 1이지만 번호 << 3을 쓰면 틀림없이 2가 곱해진다. 우리가 사용하는 상황은 무엇인가? Thanks for Ur Answer – bash

+0

사실, 1 << 3은 1 << 1 << 1 << 1 또는 2 * 2 * 2와 같습니다. 실제로 2^3을 곱합니다! 그리고 기계어 수준에서 적어도 3 사이클 ((1 * 2) * 2) * 2) 대신에 단일 사이클 실행 (1 << 3)입니다. – theGleep

1

시프트 연산자는 하드웨어에 더 효율적입니다. 근본적으로 특수화 된 곱셈과 나눗셈입니다 - 곱셈과 나눗셈 모두 FPGA 나 ASIC에서 상당히 비쌉니다. 어느 정도까지는 시프트 연산자를 사용하여 프로그램에서 곱셈과 나눗셈을 대체하려면 설계에 대한 자진한 판단이 필요합니다.

언제든지 해당 연산자가 포함 된 코드/로직을 볼 수 있습니다. 나는 코드/로직을 피하기 시작할 것이다. 오디오 또는 비디오 처리 라이브러리에서 주로 보았습니다.

비디오 및 오디오 처리는 기본적으로 가능한 이진 데이터에 의존합니다. >><<은 기본 비트의 연산을보다 자연스럽게 볼 수 있습니다.