컴퓨터 이론중에 논리연산자 Shift Right, Left가 뭔가요??
컴퓨터 서적 공부하다가
논리연산자에 대해서 이론이 나오는데
머릿속으로 못따라가겠더라구요
자세히 설명 해주실분 있으시면 감사하겠습니다!!
논리 쉬프트 연산이라기보다는 비트 쉬프트 연산이라고 하는 게 나을 것 같네요.
AND, OR, NOT, XOR같은 논리 연산도 있지만, 비트 연산도 있습니다!컴퓨터에는 모든 게 이진수로 저장된다는 건 아시겠죠...? 8비트가 1바이트가 되고요.
10진수 100은 2진수로 01100100이 됩니다. (1바이트를 기준으로 하기 위해 왼쪽에 0을 하나 더 붙였습니다.)01100100에서 모든 비트를 왼쪽으로 3칸 밀어버리면 어떻게 될까요...?
오른쪽에 000을 붙임으로써 왼쪽으로 3칸을 밀어버릴 수 있습니다. 그리고 범위를 벗어나게 된, 왼쪽의 011은 사라집니다.
01100100에서 왼쪽으로 3칸을 밀면 00100000이 됩니다. 이런 게 Left Shift 연산입니다. (오른쪽으로 밀면 Right Shift)논리연산자는 말그대로 논리에 대한 부분인데요
우선 기계어를 알아야 합니다
기계어는 0, 1로 이루어져 있고, 0 또는 1 로 이루어져 있는 Bit,
1 Bit 가 8개 모여서, 1 Byte가 되는데요
보편적으로 논리는 8비트 컴퓨터에서는 1바이트로 처리되며
16비트 컴퓨터에서는 2바이트로 처리가 됩니다
그리고 shift라는건 좌/우측으로 비트를 1칸씩 이동한다는 뜻입니다
그러므로 8비트 컴퓨터에서 Shift Right 라고 한다묜?
자리수 0 1 2 3 4 5 6 7
자리값 0 1 0 0 1 1 0 1
Shift Right 처리를 하면? 자리수 0 -> 1 , 자리수 1 -> 2 , 자리수 2-> 3 .... 으로 이동됩니다
즉 위 결과값은 0 0 1 0 0 1 1 0 가 됩니다
마찬가지로 Shift Left 하면? 반대로 되는것이니
결과값은 1 0 0 1 1 0 1 0 이 됩니다 ^^
안녕하세요?
답변이 이미 달려있지만 저만의 방식으로 설명해드리겠습니다.
1. Shift Right
Shift Right는 사용자가 지정한 비트수만큼 오른쪽으로 밀린다고 생각하면됩니다.
예를들어 부호가 없는 숫자 비트일 경우 (이동한 비트수만큼 0으로 채웁니다)
0001 0000 shift right 1을 할 경우 -> 0000 1000 으로 바뀝니다.
부호가 있는 숫자 비트일경우
0001 0000 shift right 1을 할 경우 -> 0000 1000
1001 0000 shift right 1을 할 경우 -> 1100 1000
최상위비트에 따라 채워지는 비트가 달라집니다.
위 예제를 잘 살펴보게 되면 한가지를 발견하게 됩니다. 바로 나누기 2가 된다는점.
위 예제의 2진수를 10진수로 바꾸게 되면 16 -> 8 로 나눠진다는 것을 쉽게 알 수 있습니다.
2. Shift Left
Shift Left 역시 사용자가 지정한 비트 수만큼 왼쪽으로 밀린다고 생각하면 됩니다.
예를들어 부호가 없는 숫자 비트일 경우
0001 0000 shift left 1을 할 경우 -> 0010 0000 으로 바뀝니다.
shift left 연산자는 right와 다르게 부호가 있든 없든 모두 0으로 채워줍니다.
하지만 left 연산자로 통해 부호비트가 바뀔 경우 오버플로우가 날 수 있으니 조심하시기 바랍니다
한번 임의 숫자로 Left, Right 실습 해보시면 쉽게 이해하실겁니다^^