How We Coding

Week 04

Tutoring/18-1 C Lang2018. 4. 11. 23:40

< 180411 >


Week 04



1) 1의 보수, 2의 보수.


- 10은 2진수로 00001010 (8비트 기준)

- 1의 보수를 취하면 11110101 이 된다. (0은 1로, 1은 0으로)

- 2의 보수는 1의 보수의 결과에 1을 더하면 된다. 11110110


>> 2의 보수의 결과는 -10이 된다. 

>> 검증 : -1은 11111111 이다. 여기에서 9인 00001001 을 빼면 11110110 이 된다.



2) 삼항연산자( ? 연산자)


- 삼항 연산자의 폼은 (조건식) ? 식1 : 식2; 이다.

- 조건식의 결과는 참 혹은 거짓이다.

- 조건식의 결과가 참이면 식1이, 거짓이면 식2가 수행된다.



3-1) 두 수를 입력받아, 두수의 차이의 절대값을 출력하는 프로그래밍

1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main()
{
    int a, b;
    scanf("%d%d"&a, &b);
    printf("%d\n", a > b ? a-b : b-a);
    return 0;
}
cs



3-2) 세 수를 입력받아, 가장 큰값과 가장 작은 값을 출력하는 프로그래밍

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
    int a, b, c;
    int max, min;
    scanf("%d%d%d"&a, &b, &c);
    max = a > b ?(a > c ? a : c) : (b > c ? b : c);
    min = a < b ?(a < c ? a : c) : (b < c ? b : c);
    printf("%d %d\n", max, min);
    return 0;
}
cs


>> 중첩된 삼항연산자 이해해보기..!!



4) 조건식에서의 참과 거짓.

- 거짓은 0으로 표현된다.

- 참은 0이 아닌 모든값, 즉 0이 아닌 모든 정수값이 된다.


1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{    
    0 ? printf("A") : printf("B");
    1 ? printf("A") : printf("B");
    13 ? printf("A") : printf("B");
    -2 ? printf("A") : printf("B");
 
    return 0;
}
cs

>> 실행결과 : BAAA



5) && 연산자 

- (조건식) && (조건식) 의 형태를 이룬다.

- 두 조건식이 참이면 참이 된다.


1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main()
{
    1 && 1 ? printf("A") : printf("B");
    1 && 0 ? printf("A") : printf("B");
    0 && 1 ? printf("A") : printf("B");
    0 && 0 ? printf("A") : printf("B");
    return 0;
}
cs


>> 실행결과 : ABBB



6) 문자 하나를 입력받아, 해당 문자가 알파벳 대문자인지 판단하는 프로그래밍.


1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main()
{
    char ch;
    scanf("%c"&ch);
    'A' <= ch && ch <= 'Z' ? printf("TRUE") : printf("FALSE");
    return 0;
}
cs


>> 아스키코드값의 특징, && 의 특징, 삼항연산자를 쓸 줄 알면 풀 수 있는 문제이다.



7) || 연산자.

- (조건식) || (조건식) 의 형태를 가지며, 두 조건식 중 하나의 조건식만 참이면 참이 된다.


1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main()
{
    1 || 1 ? printf("A") : printf("B");
    1 || 0 ? printf("A") : printf("B");
    0 || 1 ? printf("A") : printf("B");
    0 || 0 ? printf("A") : printf("B");
    return 0;
}
 
cs


>> 실행결과 : AAAB



8) 대입연산자


1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main()
{
    int a, b;
    a = b = 0;
    printf("%d %d\n", a, b);
    return 0;
}
cs


>> 6 번 라인을 보자. b = 0; 이라는 식은 b 에 0을 대입하고, 그 식 자체의 결과는 또한 0이 된다.

>> 그렇기 때문에 a = b = 0; 은 a = (b = 0); 에서 a = (0); 으로 이어지며, 

>> 결과적으로 a 와 b 두 변수 모두에 0이 대입된다. 



9) || 연산의 단축연산


- 아래의 프로그래밍의 실행결과를 에측해보자.


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main()
{
    int a, b;
    a = b = 0;
    
    (a = 5) || (b = 3) ? printf("A") : printf("B");
    printf(" %d %d\n", a, b);
 
    return 0;
}
cs



10) ! 연산자 (NOT 연산자)


- 참을 거짓으로, 거짓을 참으로 만드는 연산자 이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main()
{
    int a=0;
    int b=3;
        
    !a ? printf("A") : printf("B");
    !b ? printf("A") : printf("B");
    !0 ? printf("A") : printf("B");
    !1 ? printf("A") : printf("B");
 
    return 0;
}
cs


>> 실행결과는 ABAB



11) Shift 연산자 >>, <<


- << 는 비트단위로 왼쪽으로 한칸씩 밀어낸다.

- >> 는 비트단위로 오른쪽으로 한칸씩 밀어낸다.


- 10을 2진수로 표현하면 00001010 이다.

- a = 10; a = a >> 1; 이 수행되면, 00000101 이 된다. 즉 a 에는 5가 저장지며, 결과적으로 2로 나눈 몫이 된다.

- a = 10; a = a << 1; 이 수행되면, 00010100 이 된다. 즉 a 에는 20이 저장되며, 결과적으로 2가 곱해진 결과가 된다.


- a = 10; a = a >> 2; 가 수행되면 a 는 2가 된다.

- a = 10; a = a << 2; 가 수행되면 a 는 40이 된다.



12) 기타.

- 콤마연산자

- 연산자 우선순위

- 단항, 2항, 3항, 대입, 콤마 연산자.

- 컴퓨터는 뺄셈, 곱셈, 나눗셈을 보수를 이용해서 덧셈으로 처리한다는 내용. >> 10 - 3 => 10 + (-3)

- 나눗셈의 경우에 피제수와 보수를 더하여 100이 될 때까지 더해진 횟수가 몫이 된다는 내용


>> Self...^^

'Tutoring > 18-1 C Lang' 카테고리의 다른 글

Week 06  (0) 2018.04.23
Week 05  (0) 2018.04.18
Week 03  (0) 2018.04.04
Week 02  (2) 2018.03.28
Week 01  (0) 2018.03.21