본문 바로가기

C & C++/C언어

[C] 코드의 연산자 사용법

반응형


#if 0
#include <stdio.h>

//32비트의 문제점을 해결한 코드
int main(int argc, char *argv[]) 
{
	int i;
	int item[32] = {0,};

	item[700/32] |= 1<<(700%32);
	item[800/32] |= 1<<(800%32);

	for(i=0;i<1024;i++)
	{
		if(item[i/32] & (1<<(i%32)))
		printf("%d\n",i);
	}
	item[700/32] &= ~(1<<(700%32));
 
	for(i=0;i<4;i++)
	{
		if(item[i/32] & (1<<(i%32)))
		printf("%d\n",i); 
	}
	return 0;
}
#endif

 

 

#if 0
#include <stdio.h>

#define BIT_SET(x,index) (x[index/32] |= 1<<index%32))
#define BIT_ISSET(x,index) (x[index/32] & (1<<index%32)))
#define BIT_CLR(x,index) (x[index/32] &= ~(1<<index%32)))

//가독성을 높인 코드
int main(int argc, char *argv[]) 
{
	int i;
	int item[32] = {0,};

	BIT_SET(item, 700);
	BIT_SET(item, 800);

	for(i=0;i<1024;i++)
	{
		if(BIT_ISSET(item,i))
		printf("%d\n",i);
	}

	for(i=0;i<4;i++)
	{
		if(BIT_ISSET(item,i))
		printf("%d\n",i); 
	}
	return 0;
}
#endif


 


#if 0
#include <stdio.h>

#define BIT_SET(x,index) (x[index/32] |= 1<<index%32))
#define BIT_ISSET(x,index) (x[index/32] & (1<<index%32)))
#define BIT_CLR(x,index) (x[index/32] &= ~(1<<index%32)))
//#define TYPE int[32] 
typedef int TYPE[32];

int main(int argc, char *argv[]) 
{
	int i;
	TYPE item = {0,};

	BIT_SET(item, 700);
	BIT_SET(item, 800);

	for(i=0;i<1024;i++)
	{
		if(BIT_ISSET(item,i))
			printf("%d\n",i);
	}
 
	for(i=0;i<4;i++)
	{
		if(BIT_ISSET(item,i))
			printf("%d\n",i); 
	}
	return 0;
}
#endif


 


#if 0
#include <stdio.h>

//역슬레쉬 \를 넣으면 전처리기가 한줄로 인식
//역슬레쉬 뒤에는 스페이스바나 기타 문자가 들어가서는 안된다.
//☆두줄 이상의 매크로 코드는 모두 이렇게 사용한다.
#define BIT_ZERO(x)
	do{					\
		int i;				\
		for(i=0; i<32; i++)	\
		x[i] = 0;			\
	}while(0);


//초기화가 추상화 되어있지 않는 문제 해결한 코드
int main(int argc, char *argv[]) 
{
	int i;
	TYPE item;
	BIT_ZERO(item);
	BIT_SET(item, 700);
	BIT_SET(item, 800);

	for(i=0;i<1024;i++)
	{
		if(BIT_ISSET(item,i))
			printf("%d\n",i);
	}


	for(i=0;i<4;i++)
	{
		if(BIT_ISSET(item,i))
			printf("%d\n",i); 
	}
	return 0;
}
#endif

 



#if 0
#include <stdio.h>

//우선순위 조심 각각에 괄호 넣기
#define BIT_SET(x.index) ((x)->data[index/32] |= 1<<(index%32))
#define BIT_ZERO(x)         
	do{					\
		int i;				\
		for(i=0; i<32; i++)	\
		x[i] = 0;			\
	}while(0);


typedef struct{
	int data[32];
}TYPE;


//확장성의 문제를 해결한 코드
int main(int argc, char *argv[]) 
{
	int i;
	TYPE item;
	BIT_ZERO(&item);
	BIT_SET(&item, 700);
	BIT_SET(&item, 800);

 
	for(i=0;i<1024;i++)
	{
 		if(BIT_ISSET(&item,i))
			printf("%d\n",i);
	}
 
 
	for(i=0;i<4;i++)
	{
		if(BIT_ISSET(&item,i))
        	printf("%d\n",i); 
	}
	return 0;
}
#endif

 

 

 

반응형

'C & C++ > C언어' 카테고리의 다른 글

[C] 전역변수와 static 차이  (0) 2019.10.30
[C] union과 구조체의 차이  (0) 2019.10.30
[C] Type의 갯수 / Char형  (0) 2019.10.30
[C] 매개변수의 전달(call by value/call by address 포함)  (0) 2019.10.28
[C] malloc /calloc  (0) 2019.10.28