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) |