20140307 (2의 보수법, 관계, 논리 연산자)

15일차

 

------------------------------------------

Magnitude 방식과 2'Complete(2의 보수법)

------------------------------------------

unsigned 붙은것과 안 붙은것

2의 보수법을 취하는 것을 보는 소스다.

#include <stdio.h>

int main()
{
  unsigned char cNum1;
  char cNum2;

  cNum1 = 127;
  cNum2 = 127;
  printf("%d    %d\n", cNum1, cNum2);

  cNum1 = 128;
  cNum2 = 128;
  printf("%d    %d\n", cNum1, cNum2);

  cNum1 = 129;
  cNum2 = 129;
  printf("%d    %d\n", cNum1, cNum2);

  cNum1 = 255;
  cNum2 = 255;
  printf("%d    %d\n", cNum1, cNum2);

  return 0;
}

출력 화면

 

------------------

관계, 논리 연산자

------------------

#include <stdio.h>

int main()
{
  int iNum1;
  int iNum2;
  int iNum3;
  int iNum4;
  int iNum5;
  int iNum6;
  int iNum7;
  int iNum8;
  int iNum9;
  int iNum10;


  iNum1 = 6 > 5;
  iNum2 = 6 > 7;
  iNum3 = 7 == 6;
  iNum4 = !3;
  iNum5 = 7 != 6;
  iNum6 = 7 <= 7;
  iNum7 = 7 && 6;
  iNum8 = 8 || 0;
  iNum9 = 100;
  iNum10 = 7 || (++iNum9);

  printf("iNum1 = %d\n", iNum1);
  printf("iNum2 = %d\n", iNum2);
  printf("iNum3 = %d\n", iNum3);
  printf("iNum4 = %d\n", iNum4);
  printf("iNum5 = %d\n", iNum5);
  printf("iNum6 = %d\n", iNum6);
  printf("iNum7 = %d\n", iNum7);
  printf("iNum8 = %d\n", iNum8);
  printf("iNum9 = %d\n", iNum9);
  printf("iNum10 = %d\n", iNum10);

  return 0;
}

출력화면

여기서 재미있는게 있는데

바로 iNum9의 값이다.

원래 예상대로라면 101이 나와야 하지만 100이 나왔다.

왜냐하면 cpu에서도 일을 적게하려 하기에 || (or) 을 실행 시

앞의 조건이 참이면 뒷 조건은 실행하지 않는다.

반대로 앞 조건이 거짓이면 뒷 조건을 실행한다.

 

 

 

설정

트랙백

댓글