C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[40698] Re:비트연산 질문드립니다
최준호.스페로 [sparrow] 1187 읽음    2005-06-22 17:37
김재철 님이 쓰신 글 :
: 파일에서 데이터를 읽어서 한 바이트씩 비트연산을 하려고 합니다.
: 예를들어 0x13(0001 0011)값을 순서를 바꾸어 0xC8(1100 1000)로 바꾸는거죠
: 비트연산 개념이 없어 헤매고 있습니다.
: 소스코드 부탁드립니다.

안녕하세요 스페로 입니다..

//---------------------------------------------------------------------------
#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused

typedef union
{
    unsigned char  Data;
    struct BIT {                        // Bit Field Structure
        unsigned b0 : 1;
        unsigned b1 : 1;
        unsigned b2 : 1;
        unsigned b3 : 1;
        unsigned b4 : 1;
        unsigned b5 : 1;
        unsigned b6 : 1;
        unsigned b7 : 1;
    } bit;
}BIT_DATA_8;


void rotate_bit_data_8(BIT_DATA_8 * src);
int main(int argc, char* argv[])
{
  BIT_DATA_8 src;
  BIT_DATA_8 dest;

  src.Data = 0x13;

  rotate_bit_data_8(&src);

  printf("0x%x",src.Data);


  return 0;
}
//---------------------------------------------------------------------------


void rotate_bit_data_8(BIT_DATA_8 * src)
{
  BIT_DATA_8 tmp;
  tmp.bit.b0 = src->bit.b7;
  tmp.bit.b1 = src->bit.b6;
  tmp.bit.b2 = src->bit.b5;
  tmp.bit.b3 = src->bit.b4;
  tmp.bit.b4 = src->bit.b3;
  tmp.bit.b5 = src->bit.b2;
  tmp.bit.b6 = src->bit.b1;
  tmp.bit.b7 = src->bit.b0;

  src->Data = tmp.Data;
}


우선 위코드는 그냥 값만을 나타나게 하기 위해.

utime님이 제홈피에 올려 주신 bit필드 구조체와 union을 응용해서.


#if defined(WIN32)
#define ROTATE(a,n)     _lrotl(a,n)
#else
#define ROTATE(a,n)     (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
#endif

이런식으로 비트는 ROTATE로 해도 될거라 생각 했지만 답이 안나오더라구요 ㅎ.ㅎ 이유는 ... bit연산을 해봐야..

그리고 _lrotl() , _lortr() 인자로 long 입니다.

결국 위 소스 처럼 bit 필드 구조체를 이용해서 억지로 뒤바꿔서 답을 얻게 했습니다.

ㅋㅋ

그럼 수고 하세요.

+ -

관련 글 리스트
40696 비트연산 질문드립니다 김재철 704 2005/06/22
40698     Re:비트연산 질문드립니다 최준호.스페로 1187 2005/06/22
40699         무지무지 감사드립니다.(냉무) 김재철 678 2005/06/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.