C++에서의 비트 연산

  • Post author:
  • Post category:
  • Post comments:2 Comments
  • Post last modified:December 14, 2007

일부 잘못된 비트 연산 사례를 발견했다. 어떤 것이 제대로 된 코드인지 확인하고자 UnitTest++로 단위 테스트 코드를 짜봤다.

/*
EPA_NONE			    =	0x00000000,
EPA_PRIMARY_KEY		    =	0x00000001,
EPA_DB_INDEXING		    =	0x00000002,
EPA_DB_SELECT		    =	0x00000004,// | EPA_DB_INDEXING,
EPA_DB_CLUSTERED        =   0x00000008,
EPA_DB_AUTOINCREMENT    =   0x00000010,
EPA_WRITE_THRUOGH	    =	0x00000020,
EPA_ALLOW_NULL          =   0x00000040,
EPA_DB_UNIQUE_INDEX		=	0x00000080,
EPA_INCREASE_VALUE      =   0x00000100
*/

TEST(And)
{
	DWORD flag = EPA_NONE;
	CHECK( (EPA_NONE & EPA_NONE) == FALSE );
	CHECK( (EPA_NONE & EPA_NONE == EPA_NONE) == FALSE );
	CHECK( (EPA_NONE & EPA_NONE) == EPA_NONE ); // 성공
	CHECK( (flag & EPA_NONE) == FALSE );
	CHECK( (flag & EPA_NONE == EPA_NONE) == FALSE );
	CHECK( (flag & EPA_NONE) == EPA_NONE ); // 성공
	CHECK( (flag & EPA_PRIMARY_KEY == TRUE) == FALSE );
	CHECK( (flag & EPA_PRIMARY_KEY == FALSE) == FALSE );
	CHECK( (flag & EPA_PRIMARY_KEY) == FALSE );


	flag = EPA_NONE | EPA_PRIMARY_KEY;
	CHECK( !(flag & EPA_DB_UNIQUE_INDEX) );
	CHECK( (flag & EPA_DB_UNIQUE_INDEX) == FALSE );
	CHECK(flag & EPA_PRIMARY_KEY);

	flag = EPA_PRIMARY_KEY | EPA_DB_INDEXING;
	CHECK(flag & EPA_PRIMARY_KEY);
	CHECK(flag & EPA_DB_INDEXING);
	CHECK((flag & EPA_PRIMARY_KEY) && (flag & EPA_DB_INDEXING));
	CHECK((flag & EPA_WRITE_THRUOGH) == FALSE);
}

This Post Has 2 Comments

  1. hyangii

    앗.. 스킨이 확 바꼈네요 (뒷북인가요 -_-)
    RSS로만 보다보니 몰랐네요

    잘보고갑니다:

Leave a Reply to 최재훈 Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.