본문 바로가기
01.Bit 단기/C

08_연산자

by chojju 2018. 4. 28.
반응형

#include <stdio.h>
void exam1();
void exam2();
void exam3();
void exam4();
void exam5();
void exam6();
void exam7();
void exam8();
void exam9();
void exam10();
void exam11();
void exam12();
void exam13();
void exam14();
void exam17();
void main()
{
 exam17();
}
/*하나의 숫자를 입력받아서
오른쪽에서 3번째 자리의 비트가 0인지 1인지를 알려주는
프로그램을 구현하시오
*/
void exam17()
{
 int num, result;

 printf("숫자 입력 : ");   scanf("%d", &num);

 result = (num & 4) ? 1 : 0;  //

 printf("%d 의 3번째 자리의 비트값 : %d\n", num, result);
}
/*
사용자로부터 하나의 정수를 입력 받아서
그 수를 왼쪽으로 3자리 시프트 연산한 결과를 출력하는 프로그램을 구현하시오.
*/
void exam16()
{
 int num, result;

 printf("숫자 입력 : ");   scanf("%d", &num);

 result = num << 3;

 printf("%d << 3 : %d\n", num, result);
}
/*
사용자로부터 하나의 정수를 입력 받아서
그 수의 제곱수를 출력하는 프로그램을 구현하시오
*/
void exam15()
{
 int num, result;
 //사용자로부터 숫자 하나를 입력받는다.
 printf("숫자 입력 : ");
 scanf("%d", &num);

 //제곱승
 result = num*num;

 printf("%d의 제곱 : %d\n", num, result);
}

/*
사용자로부터 두개의 수를 입력받은 후
첫번째 수를 두번째 수로 나눈 나머지를 구하는 프로그램을
구현하시오.
*/
void exam14()

 int num1;
 int num2;
 int mod;

 //사용자로부터 숫자 하나를 입력받는다.
 printf("숫자 입력 : ");  
 scanf("%d", &num1);

 //사용자로부터 숫자 하나를 입력받는다.
 printf("숫자 입력 : ");
 scanf("%d", &num2);

 //나머지 구하기
 mod = num1 % num2;

 printf("%d를 %d로 나눈 나머지 : %d\n", num1, num2, mod);
}

void exam13()
{
 int xy = 140;
 int x, y;  // 12, 8

 x = xy & 0xf ; // xy : 1000 1100
     // 15 : 0000 1111
        // &  : 0000 1100
 y = xy & 0xf0; // xy : 1000 1100
     // f0 : 1111 0000
     //  & : 1000 0000
 y = y >> 4;
 printf("%d : %d\n", x, y);
}
void exam12()
{
 int x = 12;
 int y = 8;
 //1byte로 가정 (상위 4bit에 y값, 하위 4bit에 x값)
 int xy = 0;  

 //하위 4bit에 x값 저장(켜기)
 xy = xy | x; // xy : 0000 0000
     //  x : 0000 1100
     // |  : 0000 1100
 //상위 4bit에 y값 저장
 y = y << 4;  // y  : 0000 1000
     // <<4: 1000 0000

 xy = xy | y; // xy : 0000 1100
     //  y : 1000 0000
     //  | : 1000 1100
 printf("xy비트연산결과 : %d\n", xy); //140
}

void exam11()
{
 //1byte로 가정
 int result = 0; // 0000 0000

 //========== 비트 켜기 ( | ) =================
 //3번째 비트
 result = result | 4; // result : 0000 0000
       //  4     : 0000 0100
       // |      : 0000 0100
 //5번째 비트
 result = result | 16; // result : 0000 0100
       // 16     : 0001 0000
       // |      : 0001 0100
 //===============================================
 //비트 마스크 ( & )
 //2번째 비트의 상태 확인
 printf("%d\n", result & 1); // result : 0001 0100
        // 1      : 0000 0010
 //================================================
 //비트끄기 (&~)
 //3번째 비트 끄기
 result = result & ~4;  // result : 0001 0100
        //  ~4    : 1111 1011
}
void exam10()
{
 int a = 15; // 15의 2진표현 : 0000 1111
 int b = 25; // 25의 2진표현 : 0001 1001
 int c;

 c = a | b;     //0001 1111
 printf("15와 25의 비트단위 논리합(|) : %d \n", c);

 c = a&b;      // 0000 1001
 printf("15와 25의 비트단위 논리곱(&) : %d \n", c);

 c = a^b;      // 0001 0110
 printf("15와 25의 비트단위 배타적 논리합(^) : %d \n", c);

 c = ~a;      // 1111 0000
 printf("15의 비트단위 부정(~) : %d \n", c);

 return 0;
}

void exam9()
{
 int a = 1, b = 0, c = -1, result;
 // && 는 ||보다 우선순위가 높다
 // 항상 구문의 연산은 왼쪽 ==> 오른쪽
 result = a++ || ( b++ && ++c );

 printf("%d , %d , %d , %d\n", a, b, c, result);
}

void exam8()
{
 int a = 1, b = 0, c = -1, result;

 result = a++ && b++ || c++;

 printf("%d , %d , %d , %d\n", a, b, c, result);
}

void exam7()
{
 int num1 = 100, num2 = 200, num3 = 300;
 int result;
 result = num1 < num2 && num1 < num3; // T && T
 printf("%d\n", result);  //1
}

void exam6()
{
 //거짓(false) : 0
 //참(true)    : 0이외 모든 수
 int num1 = -1, num2 = 200;
 int result = num1 && num2; // &&
 printf("%d\n", result);  //1
}
void exam5()
{
 int inputnumber;
 srand(time(NULL));

 int randomvalue = (rand() % 10) + 1; // 1 ~ 10
 
 printf("입력 : ");
 scanf("%d", &inputnumber);

 printf("%d\n", inputnumber == randomvalue);
}

void exam4()
{
 int num1 = 10, num2 = 20;
 int result = num1 < num2;
 printf("%d\n", result);  // 1
}

void exam3()
{
 int a = 10, b, c = 10;
// c = a++ + a++ + a++ + a++;
// printf("%d, %d\n", a, c); // 14, 40
 c = a++ + ++a + ++a + ++a;
 printf("%d, %d\n", a, c); // 14, 44
}

void exam2()
{
 int a = 10, b, c = 10;
// b = ++a + ++a;    //b = 12 + 12
// printf("%d : %d\n", a, b); //12, 24

// b = a++ + a++;    // 10 + 10
// printf("%d : %d\n", a, b); // 12, 20

 b = a++ + ++a;    // 11 + 11
 printf("%d : %d\n", a, b); // 12, 22
}

void exam1()
{
 int a = 10, b, c = 10;
 b = a++;
 printf("%d : %d\n", a, b); // 11, 10
 printf("%d\n", a++);  // 11

 b = ++a;     // b = 13
}

 

반응형

'01.Bit 단기 > C' 카테고리의 다른 글

10_반복문  (0) 2018.04.28
09_제어문  (0) 2018.04.28
07_기본IO  (0) 2018.04.28
06_타입  (0) 2018.04.28
05_함수의 return  (0) 2018.04.28

댓글