Java - 기본기

3. Scanner 사용, 정수형 오버플로우, 타입 간 변환, 연산자와 종류

TerianP 2021. 9. 9.
728x90

1. Scanner 를 사용하여 화면에서 입력받기

  • Scanner 란 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스
  • Scanner 을 사용하기 위해서는 import 문을 사용하여 Scanner 을 추가해야 함
    • import java.util.*;
  • import 후 Scanner 객체를 생성해야 사용 할 수 있음.
    • Scanner scan = new Scanner(System in);
  • Scanner 객체 사용
import java.util.*;
import java.util.Scanner; // 둘 중 하나 사용

Scanner scan = new Scanner(System.in); // Scanner 클래스의 객체 생성
		
		double num = scan.nextFloat(); // 실수 입력 받음
		System.out.printf("%f%n", num); // 입력 받은 실수 출력
		
		String input = scan.nextLine(); // 문자열 입력받음
		System.out.printf("%s%n",input); // 입력받은 문자열 출력
		
		int input_num = Integer.parseInt(input); // 입력받은 문자열을 정수로 변환
		System.out.printf("%d%n",input_num); // 변환한 정수 출력
		
		int num_input = scan.nextInt();
		System.out.printf("%s%n", num_input+""); // 입력받은 정수를 문자열로 변환

2. 정수형의 오버플로우(overflow)

  • 오버 플로우 overflow : 오버플로우란 표현 할 수 있는 최대값을 넘어가는 것(넘어가는 수) 이다.
    • 4자리 10진수의 최솟값은 0000 ~ 최댓값은 9999 가 되고, 만약 9999가 넘어간다면 더는 표현할 수 없기에 overflow 가 발생한다.
    • 4자리 2진수의 최솟값은 0000 ~ 최댓값은 1111 이 되고, 만약 1111이 넘어간다면 더는 표현할 수 없기에 overflow 가 발생한다.
    • overflow 가 발생하여 최댓값+1 이 되면 다시 최솟값으로 바뀌어 표현된다.
    • 즉, 10진수 9999+1 ⇒ overflow 발생 , 0000 으로 표현됨. 2진수도 마찬가지로 1111 + 1 ⇒ overflow 발생, 0000 으로 표현됨.
System.out.println("sMin = "+ sMin);
System.out.println("sMin - 1 = " + (short)(sMin-1)); 
System.out.println("sMax = " + sMax);
System.out.println("sMax+1 = "+ (short)(sMax+1));
		
System.out.println("cMin = "+(int)(cMin));
System.out.println("cMin -1= "+(int)--cMin);
System.out.println("cMax = "+(int)(cMax));
System.out.println("cMax +1 = "+(int)++cMax);

2-2)정수형 범위

  • 16비트로 표현 할 수 있는 정수의 개수 : 2^16 개 ⇒ 65536
    • short 타입의 표현 범위 : -2^15 ~ 2^15-1 : -32768 ~ 32767 ⇒ -1의 이유는 0이 포함되기 때문
    • char 타입의 표현 범위 : 0 ~ 2^16-1 : 0 ~ 65535

 

3. 타입 간 변환 방법(다음 글 '형 변환'에서 좀 더 자세하게 설명)

1) 문자 → 숫자, 숫자 → 문자 : 각각 문자 0 을 더하기, 빼기 

  • 숫자 → 문자 : 3 +'0' ⇒ 문자 0 을 더함
  • 문자 → 숫자 : 3 -'0' ⇒ 문자 0 을 뺌

2) 문자열로 변환 : 빈 문자열 더하기

  • 숫자 → 문자열, 문자 → 문자열 : 3+ "" ⇒ 빈 문자열을 더 더함

3) 문자열을 숫자로 변환 => Integer.pareInt(문자열) , 여기서의 문자열은 '숫자형' 문자열이여야함

  • Integer.parseInt("3") ⇒ integer.parseInt 메소드를 사용하면 문자열 3을 숫자로 변환 가능
  • Double.parseDouble("3.4") ⇒ Double.parseDouble 메소드를 사용하면 문자열 3.4 를 숫자로 변환 가능

4) 문자열 → 문자로 변환 : CharAt(int)

  • 문자열.CharAt(0) : 문자열.CharAt(0) ⇒ CharAt(0) 에서의 0은 문자열 배열의 첫번째 자리를 의미한다고 생각하면 쉽다. 예를 들어 문자열 string 가 있고, charAt(1) 을하면 문자 t 를 확인 할 수 있다.
static void change() {
		String str = "3";
		System.out.println(str.charAt(0)); // 문자열 -> 문자

		System.out.println(str.charAt(0)- '0'); // 문자 -> 숫자
		System.out.println("3".charAt(0) -'0'+1); // 문자 -> 숫자 변환 후 +1
		
		System.out.println(Integer.parseInt(str)+2); // 문자열 -> 숫자
		System.out.println(Double.parseDouble(str)+3); // 문자열 -> 숫자(실수)
		
		System.out.println(3+'0'); // 문자 '0'은 숫자로 48, 즉 문자 0이 숫자로 변환되어 더해짐
		System.out.println((char)(3+'0')); // 문자 3 출력
		
		String str = "string";
		System.out.println(str.charAt(3)); // 문자열 string 를 문자로 변환 후 4번째 자리의 문자 출력
        
		// 번외
		System.out.println((int)(str.charAt(0))); // 문자 3은 숫자로 51
		System.out.println((int)('0')); // 문자 0은 숫자로 48
		System.out.println(str.charAt(0)+'0'); // 99 출력
	}

 

4. 연산자와 피연산자, 연산자 우선순위

  • 연산자 : 연산을 수행하는 기호
  • 피연산자 : 연산자의 연산 수행 대상
    • X + 3 ⇒ 연산자는 + , 피연산자는 X 와 3

5. 연산자의 종류 및 결합 규칙

1) 연산자의 종류

종류 연산자 설명
산술 연산자 + - * % /  << >> 사직연산과 나머지(%) 연산, 비트연산(<< >>)
비교 연산자 < > >= <= == != 크고 작음과 같고 다름을 비교
논리 연산자 && || ! & | ^ ~ 그리고(%%) 또는(||) not(!) ㅈ건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type) ? : instanceof 형변환 연산자(type), 삼항 연산자(?:), instanceof(객체 연산자)

 

2) 연산자의 우선순위 : 거의 상식선에서 대충 해결 가능함

종류 결합 규칙 연산자 높음
단항 연산자 <-------------- ++ , -- , +, -, ~, !, (type)  
산술 연산자 -------------> * / %
-------------> + -
-------------> << >>
비교 연산자 -------------> > , < , >= , <=, instanceof
-------------> == !=
논리 연산자 -------------> &
-------------> ^
-------------> |
-------------> &&
-------------> ||
삼항 연산자 -------------> ?:(삼항 연산자)
대입 연산자 <-------------- = ,+= ,-= ,*= ,/= ,%= ,>>= , <<=, &=, ^=, != 낮음
  • 연산자의 종류와 우선순위는 정보처리기사 시험에서 출제 되는 문제들로 해당 시험을 볼 예정이면 기억해두면 매우매우 좋다(21년 3회 필기 기출)
  • 물론 시험 외에도 어쨌든 외워두면 좋다.

3) 연산자의 결합 규칙에서 중요한 점은 딱 3가지

  • 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행됨
  • 단항 (1) 피 연산자 1개 > 이항(2) 피 연산자 2개 > 삼항(3) 피 연산자 3개 ⇒ 단항 연산자의 우선순위가 이항 연산자보다 높다.
  • 우선 순위가 같은 연산자가 있을때 기본적으로는 왼쪽 → 오른쪽으로 결합함. 단, 대입과 단항 연산자의 경우만 오른쪽 → 왼쪽으로 결합함.

댓글