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)를 대상으로 수행됩니다. 따라서 이진수 변환을 잘 이해하고 수행할 수 있어야 합니다.

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

비행기 위탁수하물에 USB 충전식 LED 조명 거울을 부칠 수 있는지에 대한 상세 분석

비행기 위탁수하물에 USB 충전식 LED 조명 거울을 부칠 수 있는지에 대한 상세 분석 항공기 여행 시 위탁수하물로 전자기기(특히 배터리 내장 제품)를 부칠 때는 각종 규정과 제한 사항을 준수해야 합니다. USB 충전식 LED 조명 거울의 위탁 여부는...