Dreamhack-컴퓨터 과학 기초 2

근따리·2024년 12월 25일

드림핵

목록 보기
4/6

비트 연산

  • 피연산자를 2진수로 표현하여 비트(bit)단위로 연산하는 것을 비트 연산이라 함
  • 비트 단위로 논리 연산을 수행하거나, 비트를 특정 값만큼 이동하는 시프트(shift) 연산을 수행

논리 연산

  • 참 또는 거짓 값으로 연산을 수행하고 결과로 참(1,true) 또는 거짓(0,false)를 반환

비트 연산자


시프트 연산자


비트 연산 활용

  1. AND(&) 연산을 활용한 비트 마스킹
  • 어떤 데이터에서 특정 위치의 비트만 표시하거나 가리는 연산을 비트 마스킹(Bit Masking)이라고 부름
  • 예를 들어 2바이트 크기의 0xABCD가 존재할 때, AND 연산을 활용하면 상위 8비트에 해당하는 0xAB는 없애고, 하위 8비트에 해당하는 0xCD만 남길 수 있음
  • 0xABCD에 0x00FF를 AND 연산
  1. AND(&) 연산과 시프트 연산을 활용하여 특정 비트/바이트 가져오기
  • 4바이트 크기의 데이터인 0x12345678 (0001 0010 0011 0100 0101 0110 0111 1000) 에서 특정 비트만 가져오는 예시
하위 1 바이트만 가져오기 : 0x000000FF와 AND 연산합니다.
0x12345678 & 0x000000FF = 0x00000078 (0000 0000 0000 0000 0000 0000 0111 1000)

상위 1 바이트만 가져오기 : 24번 우측으로 논리 시프트를 수행합니다. 또는, 24번 우측으로 산술 시프트한 후 0x000000FF와 AND연산 합니다.
0x12345678 >>> 24 = 0x00000012 (0000 0000 0000 0000 0000 0000 0001 0010)
0x12345678 >> 24 & 0x000000FF = 0x00000012 (0000 0000 0000 0000 0000 0000 0001 0010)

상위에서 두 번째 바이트 가져오기: 16번 우측으로 시프트 후 0x000000FF와 AND 연산합니다.
0x12345678 >> 16 & 0x000000FF = 0x00000034 (0000 0000 0000 0000 0000 0000 0011 0100)

하위 1바이트의 상위 4비트 가져오기 : 4번 우측으로 시프트한 후 0x0000000F와 AND 연산합니다
0x12345678 >> 4 & 0x0000000F = 0x00000007 (0000 0000 0000 0000 0000 0000 0000 0111)
  1. XOR 연산을 활용한 비교와 암호화
  • XOR연산은 비트 값이 같으면 0을 반환
  • 자기 자신과 연산을 하면 결과가 0
  • 같은 값에 어떤 값을 2번 XOR하면 원래의 값이 나온다는 뜻
  1. 시프트 연산을 활용한 곱셈, 나눗셈
  • 시프트 연산은 2^n을 곱하거나 나눈 결과와 동일
  • 따라서 곱셈이나 나눗셈 연산자 대신 시프트 연산자를 통해 비트 레벨에서의 연산을 빠르게 진행할 수 있음

출처 : https://dreamhack.io/

profile
보안/클라우드를 공부하는 일기장

0개의 댓글