[C++]_S1-07_시프트연산과_논리연산

신치우·2023년 12월 7일

CPP

목록 보기
7/62

쉬프트연산

연산시 left, right로 일정 칸만큼 이동하는 연산 방법이다. 어떤 프로그래밍 언어를 사용하더라도 공통적으로 지원하는 부분이니 잘 기억해두도록 하자

쉬프트 연산시 주의사항
최상위 비트(음수)가 켜져있으면 그대로 유지됩니다.


Red box : 논리연산
Blue box : 시프트 연산


처음 input data는 12345678 이다. 이후 shl eax,8을 했는데 결과는 34567800이다. shift연산은 비트 단위로 일어나기 때문이다.

그리고 shift를 통해서 지워진 데이터는 다시 shift로 원복한다고 하더라도 복구되지 않는다. shl34567800의 값을 얻고 shr로 다시 원위치 시켰지만 사라진 12는 다시 원복되지 않는 것을 알 수 있다.

장점:
쉬프트 연산을 통해 x2 또는 /2 를 더 편하게 할 수 있다.
이전 div, mul을 사용하지 않아도 더 편하게 할 수있다.

논리 연산

가장 기본적인 4개 : not, and, or, xor

  • not : 0이면 1로, 1이면 0으로
  • A and B : 둘다 1이면 1, 아니면 0
  • A or B : 둘 중 하나라도 1이면 1, 아니면 0
  • A xor B : 둘 다 1이거나 0이면 0, 아니면 1

    다른건 자주 봐왔고 자주 사용했던 부분들이다.
    xor에 대해서 좀 더 살펴보자.
    xor는 두번 반복하면 다시 자기자신으로 돌아오는 특징을 가지고 있다.95->e9->95
    이는 암호학에서 유용하게 사용될 수 있다.
    value xor key 형식으로 사용하여 value를 한번 꼬아서 내보내고 받는 쪽에서 key를 적용하여 다시 원래 값으로 사용할 수 있게 된다.

참고로 SASM은 binary 형태를 출력하지 못한다.

어디 사용할 수 있을까?

  • bitflag : 코테 등을 연습하면서 겪었던 부분이다 가장 쉽게는 True or false를 체크할 수 있고, 다르게는 각각의 위치가 True or False로 의미를 부여할 수 있다.

오늘은 여기까지
오늘은 비트연산자에 대해서 배웠다. 오랜만에 코테연습 문제를 풀던 생각이 났다. 그때는 자유자재로 사용하지 못했는데 이번 어셈블리 파트가 끝나면 코테도 같이 해봐야겠다. 더 즐겁게 문제를 풀 수 있기를 바란다.

profile
https://shin8037.tistory.com/

0개의 댓글