클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

자바 기본 프로그래밍 6 - 연산자 예제 문제 풀기 + 비트시프트 연산자 본문

프로그래밍 언어/자바

자바 기본 프로그래밍 6 - 연산자 예제 문제 풀기 + 비트시프트 연산자

huenuri 2024. 8. 10. 14:23

어제 자바 공부를 하지 못했으니 오늘 새벽에 2시간 반 정도는 자바를 공부하려고 한다. 한 4시간 정도 공부할 시간이 있는 것 같다. 아직은 잠이 덜 깨서 비몽사몽하고 졸리지만 곧 잠도 깨겠지.
금방 잠도 깰겸 다른 일처리를 하나 하고 이제 본격적으로 공부를 시작해보려고 한다.

오늘은 엊그제 자바 수업을 들으며 학습했던 부분을 책으로 확인하며 정리해보는 시간을 갖기로 했다. 모두다 아는 내용이라 예제문제만 한번씩 풀어보면 될 것 같다.


 

 

 

연산

엊그제 공부할 때는 그냥 예제 코드를 붙여넣기만 하고 따로 생각하지 않아서 다시 혼자서 문제를 풀어보기로 했다.
Chapter 2장부터는 이렇게 혼자서 문제를 푸는 연습을 해야 좋을 것이다.

 

예제 2-1 : 자바 프로그램의 기본 구조

다음 코드를 보면서 자바 프로그램의 기본 구조를 알아보자.

 

 

지난번에 그냥 코드만 붙일 때는 몰랐는데, 클래스 이름이 내가 설정한 Ex2_1로 되어 있다. 클래스 이름은 식별자 원칙이 적용되는데 숫자로 시작할 수 없었다.
책 예제 라이브러리에는 한 문제당 하나씩만 클래스가 구성되어 있어서 보기 불편하고 복잡해보였다. 난 패키지를 만들어서 한 Chapter씩 담아서 쓰는 중이다.


 

 

 

예제 2-2 : 변수, 리터럴, 상수 활용

상수 PI를 선언하고 원의 면적을 구하는 프로그램을 작성하라.


 

 

예제 2-3 : 타입 변환

 

자동 타입 변환과 강제 타입 변환이 들어있는 코드를 작성하라.

 

형변환을 하지 않으면 애러가 뜬다.

 

 

 

 

 

예제 2-4 : Scanner를 이용한 키 입력 연습

Scanner 클래스로 이름, 도시, 나이, 체중, 독신 여부를 입력받고 다시 출력하는 프로그램을 작성하라.

 

 

문제를 풀면서 지난번에는 발견하지 못했던 것을 깨달았다. 자료형에 따라 next()이 달라지는 거였다. int, double, boolean형은 그 옆에 꼭 붙여주어야 한다.


 

 

 

산술 연산

 

예제 2-5 : 몫과 나머지 연산

 

직접 풀어보니 조금 어려웠다. 시간을 담는 문제는 언제나 헤깔린다. 출력해보니 오답이 나와서 몇번 수정했다.


 

증감 연산

예제 2-6 : 대입 연산자와 증감 연산자 사용

 


 

비교 연산과 논리 연산

예제 2-7 : 비교 연산과 논리 연산

 

 

마지막에 ^를 사용하는 문제는 조금 어려웠다. ^ 연산이 not인건 알겠는데 한쪽에만 비교할 때 사용하는지 알았다. 이렇게 두 가지를 비교할 때도 사용한다는 걸 새롭게 알게 되었다.
앞의 것이 true이고, 뒤의 것이 false이니 둘다 다르므로 true이다.


 

 

조건 연산

예제 2-8 : 조건 연산

 

 

삼항연산자를 문자열 옆에 사용할 때는 꼭 괄호로 묶어주어야 한다. 그렇지 않으면 mismatch 문구가 뜬다.


 

 

 

비트 연산

비트 연산은 비트끼리 AND, OR, XOR, NOT 연산을 하는 비트 논리 연산과 비트를 오른쪽이나 왼쪽으로 이동시키는 비트 시프트 연산이 있다.
잠시 XOR이 무엇인지 잊어버렸다. 비트 연산은 수업 시간에 다루지 않아서 혼자서 학습을 진행하려고 한다.

 

비트 논리 연산

 

 

비트 시프트 연산

 

 

 

 

 

 

 

 

예제 2-9 : 비트 논리 연산과 비트 시프트 연산

 

비트 시프트 연산은 조금 어려웠다. 다른 언어에서 보지 못했던 <<<도 접했는데, 이건 논리적 비트 시프트 연산이라고 한다. 최상위 비트에 항상 0이 삽입되므로 0으로 나누어지지 않는다.
이 부분은 조금 어려워서 다음에 좀더 학습해야할 것 같다.

 

 

 

 

 

핵심 체크문제 풀기

 

문제를 풀어보니 증감 연산자와 비트 연산자를 아직 완전히 이해하지 못했다는 걸 알게 되었다.
다시 몇번이나 풀었는데 답이 나오지 않는다. 1번에서 나머지가 0이므로 답은 8 아니면 9인데 답은 이것보다 더 큰 값이다.
2번에서도 오른쪽으로 2번 시트프했으니 8을 4로 나눈 2가 되어야 하는데 왜 답이 안되는지 이것도 알 수가 없다.


 

 

 

학습을 마치고

오늘은 지난번에 그냥 넘어갔던 부분도 하나하나 다시 풀고 학습하느라 시간이 많이 걸렸다. 4시 반부터 2시간 정도 이 부분을 학습한 것 같다.
그래도 확실하게 이해하고 넘어갈 수 있어서 참 좋았다. 그냥 코드를 읽기만 하는 것과 손으로 직접 푸는 건 많이 달랐다.

다음에도 알고 있다고 생각하는 개념도 다시 복습하며 문제를 풀어봐야겠다고 생각했다. 아직 못 푼 문제가 있지만 우선은 그냥 넘어가고 다시 이 문제에 도전할 생각이다.
이제 공부할 시간이 2시간도 남지 않았는데 오늘 새벽에는 자바를 더 학습하고 싶다~