BIT 연산을 사용한 메모리 저장

BIT 연산을 사용한 메모리 저장 

날짜 저장을 위한 처리 Sequence

  • 시간 구조체(SYSTEMTIME) 선언 : 년(4자리),월(2자리),일(2자리),시(2자리),분(2자리),초(2자리),밀리초(3자리) 를 저장할 수 있는 메모리 공간을 만든다.
  • 현재의 시스템 시간 읽어오기 : 선언된 메모리에 현재 시간정보가 저장된다.
  • 생성할 패킷 저장 메모리 초기화 : 인덱스는 임으로 정의한 것이어서 14이며, 시간정보를 어디에 저장할지 정하게 되면 인덱스 값은 변하게 된다.
  • 읽어온 시스템 시간의 년도가 4바이트인데, 년도 4자리를 사용하지 않고 2자리만 사용한다면, 년도 - 2000을 하여 2자리만 사용할 수 있도록 한다.

사용 예제 코드

  • SYSTEMTIME sysTime;
  • GetLocalTime(&sysTime);
  • bufHex[14] = 0;
  • bufHex[14] = (sysTime.wYear - 2000) << 2;
  • bufHex[14] |= (sysTime.wMonth & 0x0C) >> 2;

날짜를 특정 메모리에 비트 단위로 저장하는 코드 설명

해당 코드는 현재 시스템 시간에서 연도와 월 정보를 읽어와서, 이를 16진수로 변환하여 버퍼에 저장하는 코드입니다. 

  • (sysTime.wYear - 2000) << 2 : 시스템 시간의 연도에서 2000을 뺀 값을 2비트 왼쪽 시프트 연산자(<<)를 사용하여 4배로 만듭니다. 그 결과 연도 값이 4비트로 표현되어 버퍼의 14번 인덱스에 저장됩니다.

  • (sysTime.wMonth & 0x0C) >> 2 : 시스템 시간의 월 정보를 4로 나눈 나머지를 버리고(& 0x0C) 2비트 오른쪽 시프트(>>) 연산자를 사용하여 2비트로 만듭니다. 그 결과 월 정보가 2비트로 표현되어 버퍼의 14번 인덱스에 저장된 값을 비트 논리합(|=) 연산자를 사용하여 월 정보를 추가로 저장합니다.

따라서, 이 코드는 시스템 시간에서 연도와 월 정보를 추출하여 16진수로 변환하여 버퍼에 저장하는 작업을 수행하는 코드입니다.

비트 연산의 주요 고려사항

비트 연산(bitwise operation)을 수행할 때는 몇 가지 고려사항이 있습니다.

  • 데이터 타입 : 비트 연산을 수행하는 데에는 정수형 데이터 타입(int, long 등)을 주로 사용합니다. 그러나 부동소수점(float, double 등)은 비트 연산이 불가능합니다.
  • 비트 연산자 종류 : 비트 연산자로는 AND(&), OR(|), XOR(^), NOT(~), 시프트 연산자(<<, >>)가 있습니다. 각 연산자의 동작을 잘 이해하고 사용해야 합니다.
  • 연산 우선순위 : 비트 연산자는 산술 연산자보다 우선순위가 낮습니다. 따라서 괄호를 사용하여 우선순위를 조정해야 할 때가 있습니다.
  • 비트 수 : 비트 연산을 수행할 때 비트 수(bit length)를 고려해야 합니다. 데이터 타입의 비트 수에 맞춰서 연산을 수행해야 합니다.
  • 부호 여부 : 부호 있는 데이터 타입에서는 최상위 비트(MSB, Most Significant Bit)가 부호 비트(sign bit)로 사용됩니다. 이를 고려하여 연산을 수행해야 합니다.
  • 이진수 변환 : 비트 연산은 이진수(bit)를 대상으로 수행됩니다. 따라서 이진수 변환을 잘 이해하고 수행할 수 있어야 합니다.

이러한 고려사항들을 잘 이해하고 비트 연산을 수행하면, 효율적인 코드 작성에 도움을 줄 수 있습니다.

해외여행 비행기 기내 위탁 수하물 향수의 반입 용량 확인 방법

비행기 기내 위탁 수하물 향수의 반입 용량은? 비행기를 타고 여행을 떠날 때, 특히 해외여행을 계획하고 있다면, 기내 반입 수하물과 위탁 수하물에 대한 규정을 정확히 이해하는 것이 중요합니다. 그 중에서도 향수와 같은 액체류의 반입 규정...