비트확장, 비트축소, 논리연산

원래벌레·2022년 4월 12일
0

💎 비트 확장

  • short 형이 일반적인 데이터형으로 바뀌는 경우를 예로 들 수 있다.

  • short형이 int형으로 바뀐다고 가정 할 때, 여기서 이러한 연산들이 발생한다.
    1) 부호비트를 확인한다.
    2) int형 만큼의 저장소를 잡는다.
    3) 형 변환을 통해서 새롭게 가지게된 저장소에 부호비트를 채워넣는다.
    ex) 11000000 11111111 = 11111111 11111111 11000000 11111111

cf) unsigned는 0을 채움, signed는 부호비트 확인

💎 비트 축소

  • 이 경우는 확장에 반대이다. int형이 short가 되는 것을 예로 할 수 있다.

  • 다음과 같이 연산한다.
    1) short형의 제일 큰 비트 자릿수보다 1만큼 큰 자리수의 값을 기억한다.
    2) int형을 위에서 얻은 자리수의 값으로 나머지 연산을 해준다.

💎 논리연산

  • 하드웨어의 구성
S2S1출력연산
00F=A&BAND
01F=A|BOR
10F=A XOR BXOR
11F=!ANOT

이렇게 총 네가지의 연산을 하는 4x1MUX를 가지고 있다.
ex)4-비트 논리 연산장치 위의 MUX가 네개가 연결됨

💍 선택적 세트연산

  • 선택적 세트연산이란 이진수로 표현된 A에서 원하는 자리수를 1로 세트해주기 위한 방법이다.
  • 방법은 이렇다.
    1) 내가 바꾸기를 원하는 자리수만 1을 가진 이진수 B를 구한다.
    2) A와 B를 OR연산을 한다.

💍 선택적 보수 연산

  • 내가 원하는 부분에 보수가 일어나게끔 해주는 연산

  • 방법
    1) 보수가 되길 원하는 부분을 1로 한다.
    2) A와 B를 XOR 연산을 해준다.

💍 마스크 연산

  • 내가 원하는 부분을 hidden 하기 위한 연산

  • 방법
    1) 내가 0으로 바꾸고 싶은 자리수는 0, 그대로 하고 싶은 부분은 1로 한다.
    2) 그리고 A와 B를 AND연산한다.

💍 삽입 연산

  • 특정한 부분에 내가 원하는 값을 넣고 싶을 때 하는 연산이다.
    ex) 11001111 -> 01011111 이라하면 앞에 네자리수가 임의대로 바뀌었다.

  • 방법
    1) 일단 내가 바꾸기를 희망하는 자리수를 0으로 초기화 해준다.
    2) 초기화를 해주기 위해서는 mask 연산을 한다. 원하는 부분 0 하기 싫은 부분 1 AND연산
    3) 그리고 초기화를 해준 부분에 대해서 내가 원하는 값을 세트해주기 위해 선택적 세트 연산을 한다.
    4) 세트하고자 하는 부분에는 1 아닌 부분에는 0을 넣고 OR 연산을 한다.

💍 비교 연산

  • A와 B가 같은지 아닌지 확인하는 연산이다.

  • 방법
    1) A와 B를 XOR 연산을 해준다.
    2) 그러면 A의 값이 B와 같은 부분은 0, 아닌부분은 1로 바뀌게 된다.

💍 C code bit operations

int main(){
	int x,y,z
    x=20;
    y=15;
    z=x|y;
    printf("%08X %08X %08X",x,y,z);
}

결과 : 00000014 0000000F 0000001F
  • 지금 상황은 선택적 세트를 하는 상황이다.
  • x에 값에서 a3a2a1a0 에 해당되는 부분을 선택적 세트를 하기 위해서 y의 값과 OR 연산을 해주었다.

10100
01111

11111

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글