본문 바로가기

📜✏️노트 자리없어서 적는 IT 지식📜✏️

정처산기 자주 틀리는 문제.

Java로 구현된 프로그램 문제

 

int a = 035 b = 0x35 c= 35

일때 printf 하면 각각 몇인지?

 

여기서 Java에서는 앞에 0이 붙으면 8진수, 0x가 붙으면 16진수이고 , 기본이 10진수 이므로 10진수로 바꿔야됨.

 

10진수로 바꾸는 법은 각각 8과 16을 곱하면 된다.

 

a = 35(8진수)를 바꿔야 함  > 3 x 8의1승 + 5 x 8의0승 = 24 + 5 > 29

b = 35(16진수)를 바꿔야 함 > 3 x 16의 1승 + 5 x 16의 0승 = 48 + 5 = 53

c는 그냥 35이다.

 

 

2. Java 프로그래밍 문제 풀이

 

int j, k, L ,result

 

j = 10 , k = 20 , L = 30

result = j < k ? k++ : --L 인데, 후치 연산이 매우 헷갈린다.

sysout.printf( d d d\n , result , k , L);

 

풀이는 J < K = 10 < 20  이므로 True; 여서 k++ 이다. 여기서! result는 20이다! 왜냐하면 ++ 후치연산이므로 현재 계산식은 건너뛰고 다음 코드에서 1이 증가된다.

 

즉, 결과는 20, 21 , 30이 된다.

 

 

 

 

 

3. 파이썬 연산식 문제.

a, b  = 10;

a = 20 % 11 / 3 * 5 - b;

이면 연산식이 동등조건이면 왼쪽부터 먼저 계산이 된다.

즉 20 % 11 = 9 , 9 / 3 = 3 , 3*5 = 15 , 15 - 10= 5 

a = 5 가 된다.

 

 

5. 자바 비트 연산자 문제

TMI : 비트 연산자 우선 순위는 & , ^ , | 순서이다. 중요하다.

 

int a,b,c,hap;

a = b = c = 2;

hap = ++ a |  b-- & c--;

sysout.printf (d d d d ,hap, a , b, c)를 출력하시오.

 

hap = (++a | (b-- & c--) 순서이다. 비트 연산자에도 우선 순위가 있기 때문이다.

즉, 10진수로 바꾸면

0010

0010 을 and 연산자로 하면

0010 = 2 가되고

++a  이므로 전치 연산을 적용하여 a = 3 이된다.

0011

0010 을 or연산으로 하면

0011 이 되어 3이된다. 즉,

hap =3 , a = 3 , b= 1 , c = 1 이된다. b와 c는 --가 후치연산으로 들어가서 저 계산식 이후 1을 감소하였기 때문.

 

 

★ 언어에서 a*= b = 5 등 a*= , a/= 이런 문제가 나오는데

 

이런 문제들은 좌츨 a = a*를 두고 우측에있는 b =5 부터 계산해야된다. 암기하자.

 

즉 a = a * (b = 5) > a = 10 * 5 가 되어 a 는 50이 된다.

 

a = 3 , b = 4 , c = 5 , d =5이고

a += 6 + --b; 이면 a = (a +( 6 + 3 ))  > 12가 되고

d *= 7 - c++; 이면 d = (d *(7 - 5)) > 10이 다.

a=12,b=3,c=6,d=10이 정답이다.

연산식의 순서를 굉장히 중요하게 생각하자!

 

 

6. 자바에서 중요한거

for, do while 등등 반복문에서 i <=10 또는 i < 10 이런 조건이 나오면

i는 10에서 끝나지 않고 , 11까지 진행 후 거젓이 판명되면 종료되는걸로 명시하자.