좌측 시프트 연산 : 왼쪽으로 이동 시키고 비는 곳은 0으로 채운다.
우측 시프트 연산 : 우측으로 이동 시키고 비는 곳은 0으로 채운다.
순환 시프트 : 연산이 순환적으로 이루어져서
A레지스터의 있는 값을 B 레지스터로 옮길 때와 같은 일을 할 때 사용된다.
ex) A : 1101 / B : 0000
4번 연산이 발생한 후 결과 A : 1101 / B : 1101
좌측으로 가면 2배, 우측으로가면 배 된다.
좌측 시프트 연산
1) 부호 비트는 고정시키고, 좌측으로 이동시킨다.
2) 비는 곳은 0으로 채운다.
3) 만약에 현재 가지고 있는 비트 이상으로 이동을 하려고하면 , 논리적인 시프트 연산이 발생하고 모든 비트는 0이 된다. 이 경우 오버플로우로 인식한다.
우측 시프트 연산
1) 부호 비트는 고정시키고, 우측으로 이동 시킨다.
2) 비는 비트는 부호 비트로 채운다.
3) 우측 시프트를 하면서 언더플로우가 발생하다가 모든 자리수의 비트가 0또는 1만 있을때, 0 또는 -1로 인식하고 또 다시 좌측 시프트 연산을 하더라도 값이 달라지지 않는다.
이진수로 표현된 어떤 자료중 특정 부분을 추출하고 싶을 때,
1) 원하는 부분의 끝이 이진수의 0의 자리수에 오도록 해준다.
2) 앞에 부분을 mask 처리한다.
if문의 bool 제어
1) if(x) a=y else a=z; which is the same as z=x ? y : z ;
2) 위의 식은 a = ((x<<31) >>31)&y +((!x) << 31 ) >> 31) & z ;
3) 위의 식으로 x가 1일때 a=y, x가 0일때는 a=z가 된다.
두 수를 더하고, 만약 올림수가 발생하면 버림
Full Adder 회로 여러개를 통해서 여러 비트의 합을 구합니다.
C플래그 : 올림수
S플래그 : 부호
Z 플래그 : 0(zero)
V 플래그 : 오버플로우 - 4비트 덧셈 연산을 기준으로 C4와 C3의 값이 서로 다르면 오버플로우가 발생합니다.