블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

bitbuf

C언어,ARM / 2020. 2. 15. 23:50
int bitbuf_get_1_cnt(byte4 *p,int n)
{
	int cnt=0,i;
	for(i=0;i>5;//j=i/32;
		k=i&0x1F;//k=i-j*32;
		if(gbi(p[j],k)==0)
		{
			sbi(p[j],k);
			return 1;
		}
	}
	return 0;
}
int bitbuf_cbi(byte4 *p,int n,int i)
{
	int j,k;
	if(0<=i)if(i<(n*32))
	{
		j=i>>5;//j=i/32;
		k=i&0x1F;//k=i-j*32;
		if(gbi(p[j],k))
		{
			cbi(p[j],k);
			return 1;
		}
	}
	return 0;
}
int bitbuf_gbi(byte4 *p,int n,int i)
{
	int j,k;
	if(0<=i)if(i<(n*32))
	{
		j=i>>5;//j=i/32;
		k=i&0x1F;//k=i-j*32;
		return gbi(p[j],k);
	}
	return 0;
}
int bitbuf_next1_loop(byte4 *pArray,int n,int i)//i부터, 다음 '1'비트의 인덱스 찾기.ret=-1(not found)
{
	int size,m=32*n;
	size=m;
	if(i<0)i=0;
	while(m)
	{
		m--;
		if(i>=size)i=0;
		if(bitbuf_gbi(pArray,n,i))
		{
			return i;
		}
		i++;
	}
	return -1;
}
#ifdef _DEBUG
	void DEBUG_bitbuf_next1_loop_test()
	{
		byte4 a[2];int n=countof(a),i,m=sizeof(a)*8;
		//----------------
		a[0]=0;
		a[1]=0;
		i=bitbuf_next1_loop(a,n,-1);
		DEBUG_if_err(i!=-1);
		i=bitbuf_next1_loop(a,n,0);
		DEBUG_if_err(i!=-1);
		i=bitbuf_next1_loop(a,n,1);
		DEBUG_if_err(i!=-1);
		i=bitbuf_next1_loop(a,n,m);
		DEBUG_if_err(i!=-1);
		i=bitbuf_next1_loop(a,n,m+1);
		DEBUG_if_err(i!=-1);
		//----------------
		a[0]=1;
		a[1]=0;
		i=bitbuf_next1_loop(a,n,-1);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,0);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,1);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,m);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,m+4);
		DEBUG_if_err(i!=0);
		//----------------
		a[0]=1<<5;
		a[1]=0;
		i=bitbuf_next1_loop(a,n,-1);
		DEBUG_if_err(i!=5);
		i=bitbuf_next1_loop(a,n,0);
		DEBUG_if_err(i!=5);
		i=bitbuf_next1_loop(a,n,1);
		DEBUG_if_err(i!=5);
		i=bitbuf_next1_loop(a,n,m);
		DEBUG_if_err(i!=5);
		i=bitbuf_next1_loop(a,n,m+4);
		DEBUG_if_err(i!=5);
		//----------------
		a[0]=0;
		a[1]=1;
		i=bitbuf_next1_loop(a,n,-1);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,0);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,1);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,m);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,m+1);
		DEBUG_if_err(i!=32);
		//----------------
		a[0]=0;
		a[1]=1<<31;
		i=bitbuf_next1_loop(a,n,-1);
		DEBUG_if_err(i!=63);
		i=bitbuf_next1_loop(a,n,0);
		DEBUG_if_err(i!=63);
		i=bitbuf_next1_loop(a,n,1);
		DEBUG_if_err(i!=63);
		i=bitbuf_next1_loop(a,n,m);
		DEBUG_if_err(i!=63);
		i=bitbuf_next1_loop(a,n,m+1);
		DEBUG_if_err(i!=63);
		//----------------
		a[0]=0;
		a[1]=1<<3;
		i=bitbuf_next1_loop(a,n,-1);
		DEBUG_if_err(i!=35);
		i=bitbuf_next1_loop(a,n,0);
		DEBUG_if_err(i!=35);
		i=bitbuf_next1_loop(a,n,2);
		DEBUG_if_err(i!=35);
		i=bitbuf_next1_loop(a,n,m);
		DEBUG_if_err(i!=35);
		i=bitbuf_next1_loop(a,n,m+1);
		DEBUG_if_err(i!=35);
		//----------------

		//----------------
		a[0]=1;
		a[1]=1;
		i=bitbuf_next1_loop(a,n,-1);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,0);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,1);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,m);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,m+1);
		DEBUG_if_err(i!=0);
		//----------------
		a[0]=0x11;
		a[1]=0x11;
		i=3;
		i=bitbuf_next1_loop(a,n,i);
		DEBUG_if_err(i!=4);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=36);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=4);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=36);
		//----------------
		a[0]=0x11;
		a[1]=0;
		i=10;
		i=bitbuf_next1_loop(a,n,i);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=4);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=4);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=0);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=4);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=0);
		//----------------
		a[0]=0;
		a[1]=0x11;
		i=17;
		i=bitbuf_next1_loop(a,n,i);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=36);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=36);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=32);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=36);
		i=bitbuf_next1_loop(a,n,i+1);
		DEBUG_if_err(i!=32);
		//----------------
	}
#endif
Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함