본문 바로가기

Programming Language/Embedded C

[C언어] 비트연산

문제

다음 int a = 0xA5의 값이 있다.

int *p를 이용하여 a의 내용들을 변경하고 출력하세요

(비트는 우측에서 0부터 시작한다.)

1. 6번 비트가 0인지 1이면 true 0이면 false를 출력

2. 3번 비트와 1번비트를 1로 set하고 출력

3. 1번 비트와 2번 비트를 0으로 clear하고 출력

4. 5,6,7,번 비트를 추출하여 값을 출력하세요


#include <stdio.h>

#define PR(a) printf("%x\n" , a)


int main(void)

{

int a = 0xA5;


//1.

if(a&(1<<6))

puts("true");

else

puts("false");


//2.

a = a| (1<<3)+(1<<1);

PR(a);


//3.

a = a&~((1<<2)+(1<<1));

PR(a);


//4.

a = a & 0xE0;

PR(a);

}



0x12345678을 0x87654321로 바꾸기

int main(void)

{

int a=0x12345678;

int b;

int dx , cx=3;

for(dx=0; dx<sizeof(a) ; dx++)

((char*)&b)[cx--] = ((char*)&a)[dx];

PR(b);

}



4의 배수 만들기

int main(void)

{

int a=5;

a+=3;

a&=~3;  // a-=3;

}


'Programming Language > Embedded C' 카테고리의 다른 글

[C언어] 진법변환  (1) 2016.11.27
[C언어] scanf 함수  (1) 2016.11.27