반응형

안녕하세요. 오늘 주제에 앞 서서 이걸 보시면
정보처리기사 실기 접수 종료

2023.09.04.(월) 오전 10:00 부터

2023.09.07.(목) 오후 06:00 까지

 

?? 

 


먼저 영어부터 공부해야한다는게 개 억울하지만

Binary : 2진법의
Decimal : 10진법의 

# 첫 글자 주목 

Octamal :8진법의 (문어)
Hexadecimal: 16진법의 Hexa + decimal

일단 이거 보고 시나공의 C언어 예제 문제를 보시죠

#include <stdio.h> = 써놓고 시작하는 문장

 

C언어 #include의 의미

#include <stdio.h>
main()
{
    int i, j;
    scanf("%o#%x", &i, &j);
    printf("%d %d", i, j);
} 
// 15#22 입력됨 
// 정답: 14 34 

scanf("%o#%x", &i, &j);

scanf()는 C의 표준입력함수
"%o # %x"의 뜻:
#을 기준으로
첫 번째 입력값은 8진수로 받는다
두 번째 입력값은 16진수로 받는다
이를 차례대로 i와 j로 저장한다.

printf("%d %d", i, j);

받은걸 출력하는 창
%d는 decimal

다음 16진수로 22

두 번째 자리 2은 16이니까 16 * 2

첫 번째 자리 2는 그냥 2

32 + 2 = %d로 34.

그래서 답은 13 34이다

어우 길어라;;

그리고 16진법이면 9 다음에는 어떻게 적나요?
1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e 
랍니다
e다음은 16이니까 자리가 넘어가구요

다음 제어문 예제

main () {
    int score[] = {86, 53, 95, 76, 61};
    char grade;
    char str[] = "Rank";
    for (int i = 0; i < 5; i++){
        switch (score[i]/10) {
        case 10:
        case 9:
            grade = 'A';
            break;
        case 8:
            grade = 'B';
            break;
        case 7:
            grade = 'C';
            break;
        default: grade = 'F';
        }
        if (grade != 'F')
        printf("%d is %c %s \n", i+1, grade, str);
    }
} // %c 는 문자 %s는 문자열(Rank같은)

그래서 공부한 거, 풀어서 다시 써보자면

int score[] = {86, 53, 95, 76, 61};

score에 5개 int가 들어가 있음

char grade;

문자열을 넣어놓을 자리를 만들어놓기

char str[] = "Rank";

str이라는 배열에 R a n k를 하나씩 넣어 놓음

switch (score[i]/10) {
case 10:
case 9:
grade = 'A';
break;

switch문의 소괄호 안의 값을 case에 맞는 곳으로 이동
score[i]를 10으로 나눴을 때 9면 case9로 이동하고 이 switch문을 나가버림(break없을 때도 어떻게 해야하는 지 적을 꺼임)
조건문에서는 그냥 그 값이 True이면 조건문 안의 코드들을 실행
but, switch문은 약간 다르네

if (grade != 'F')
printf("%d is %c %s \n", i+1, grade, str);

   <br>score에 저장된 것 중 grade가 F가 아니라고 판별난 score를 printf의 형식으로 출력합니다. 


그래서
%d = 10진수
%c = 문자(하나)
%s = 문자열
86 is B Rank;
이렇게 나온다는 것
\n은 줄바꿈이니까
86 is B Rank
(줄 바꾸고)
95 is A Rank

C언어 자료형 정리
int는 다 아는 integer로 정수 4byte
float은 당연히 실수 4byte
char는 character로 1byte 문자형 

그 외
short int: -32768 ~ 32767 2byte
long int: -2147483648 ~ 217483647 4byte 


double: 8byte
char는 ASCII코드로 감

아 글고

C에서 특이했던 것들

96 / 10 = 9.6이지만
C에서는 
96 / 10 = 9 가 됨
그냥 소숫점은 사라지는 듯. (반올림 아님)
#include <stdio.h>
main () {
  int c = 1;
  switch (3) {
      case 1 : c += 3;
      case 2 : c++;
      case 3 : c = 0;
      case 4 : c += 3;
      case 5 : c -= 10;
      default: c--;
  }
  printf("%d", c);
}

// 답 -8
  • 설명 *

switch가 3이면 바로

case 3으로 가세요

그럼 선언해놓은, 값이 1인 c가 0이 됨.

그리고 나서 break가 없잖아요?
그냥 그 이후 case4, 5 이후로로 끝까지 다 돌고 나온다는 점
그럼 c 값은 0 + 3 - 10
거기다가 default로 c-1하면
-8이 출력됩니다


java

그냥 default로 알아야 하는 거 같은 연산자부터 공부.
요 놈

문제 8 
public class test
{
  public static void main(String[] args){
    int w = 3 , x = 4, y = 3, z = 5;
    if((w==2 | w==y) & !(y>z) & (1 == x ^ y != z)) 
      w = x + y; 
      if ( 7 == x ^ y != w)  
        System.out.println(w);
      else 
        System.out.println(x);
    }
    else {
      w = y + z;
      if (7 == y ^ z != w)
        System.out.println(w);
     else 
        System.out.println(z);

      }
  }
}
  1. "( )" "[ ]" (괄호)
  2. ! ~ ++ -- (부정·증감)
    • / + - (산술)
  3. << >>(비트 쉬프트 연산)
  4. ">=", "<=" 등(관계 연산)
  5. != ==
  6. & | ^ (비트 논리 연산)
  7. && || (논리 연산)
  8. ? (삼항 연산)
%d 10 & %d 5 의 답을 적으시오
*풀이*

0000 1010 과 0000 0101 답은 걍 0
13 | 18 의 답을 적으시오

*풀이*
0000 1101 과 0001 0010 
이렇게 한 곳만 1이어도 다 1로 변환 됨. 그렇기 때문에 답은 1+2+4+8+16 = 31
15 ^ 5 의 답을 적으시오

*풀이*
0000 1111 과 0000 0101
이 놈은 둘 중에 한 곳만 1인 부분만 1로 하고 둘 다 0이든, 둘 다 1이면 0으로 변환

그렇기 때문에 답은 10

​

8bit의

이런 순서로 해야 한다는 점


0 | 1
0
0 ^ 1

1 1 1

1 & 1 & 1
이기 때문에 결과적으로 1 & 1 & 1은 당연히 비트 and 연산으로 1f로 나오기 때문에 if조건은 True가 된다.

 

    w = x + y; //일단 w는 3+4 = 7.
    if ( 7 == x ^ y != w)  
      System.out.println(w);
    else 
      System.out.println(x);
  }

// if 조건 안에서도 
7 == x와 y != w 계산 후 
^ 해야 한다는 점 


w = 7
7 == x --> 0 (7 == 3(x값)??)
y != w --> 1 (3 != 7이니까)
0 ^ 1 이기 때문에 true인
        System.out.println(w);
가 실행 
그래서 답은 
7

아 그리고 비트 연산 개 빡...

다음 문제)

문제 9
public class test {
public static void main(String args[]) {
    int a=5, b=9, c;
    c = b % 5 < 5 ? 1: 0; 
**  c = c | c << 3; ** // 바로 여기
    c = a < 5 || c>= 10 ? c-a : c+a;
    System.out.printf("%d", c);
  }
} 
// 답 14
    c = b % 5 < 5 ? 1: 0; 
--> 4 < 5 가 참일 때 1 거짓일 때 0
--> 그래서 c는 1이 되는데요..

    c = c | c << 3; 
--> 1 | (1 << 3) 이게 왜 9가 되는지 도통 이해가 안되는 상황. 
--> 1 << 3 은 Binary로 1000이니까 

--> 1 | 8 이면 둘 중에 하나만 참이니까 1이 아닌가 싶었는데
결과는 c = 9 랍니다.
그래서 아 그냥 1 이상의 int가 나오면 더해지는 가보다 하고 넘어가버리기 
맞겠지? 

진짜

어제 C랑 java 처음 공부하는내 심정

아무튼 정리하면서 복습 녹진하니 돼버렸으니

다시 ㄱㄱ 해야지

 
반응형