10진수를 2진수로 출력

 

 void Bdisp(int dec)
{
 int i=0;
 int isStartFind=0;
 int res=0;

 for(i=31;i>=0;i--)
 {
  res = (dec>>i)&0x1;

  if(res !=0 || (res==0 && isStartFind!=0))
  {
   printf("%d\n", res);
   isStartFind = 1;
  }
 }
}

 

 

 

 

원하는 위치에 원하는 개수만큼 원하는 값으로 변경

 

 //bits : 변경할 비트 수, ex) 3개(111) = 5, 2개(11) = 3, 1개(1) = 1
//val : 변경할 값
//shift : 변경할 비트 위치
void BitSet(int *a, int bits, int val, int shift)
{
 //변경할 비트만큼 Left Shfit하고 반전시키고 값과 &연산을하여
 //변경할 비트를 0으로 변경한다.
 *a = *a & (~(bits<<shift));
 //0으로 변경된 비트 자리에 | 연산을 통해 원하는 값을 SET한다.
 *a = *a | (val<<shift);
}
#define BITSET(a, bits, val, shift) *a = (*a & (~(bits<<shift))) | (val<<shift)

 

 

 

 

원하는 위치 토글

 

 //shift : 변경할 비트 위치
void BitToggle(int *a, int shift)
{
 //원하는 위치를 토글한다.
 *a ^= (0x1<<shift);
}
#define BIT_TOGGLE_SET(a, shift) *a ^= (0x1<<shift)

 

 

 

+ Recent posts