[Java] 변수_3

life_is_egg·2022년 4월 20일
0

Java

목록 보기
3/15

12. printf를 이용한 출력

지금까지 사용한 println()은 변수의 값을 그대로 출력함.
그니까 다른 형식으로 표현하고 싶으면 변수 값을 새로 작성해야됨.

int x = 10;
		System.out.println(x);

여기서 변수 x의 출력값을 소수점 둘째자리까지 출력하거나 16진수로 표현하고싶어요~ 하면 이제 int x = 10.00 이런식으로 일일히 수정해야된단말이지.

너무 번거롭다!
그럴땐 printf()를 사용하자.
printf()는 '지시자(specifier)'를 통해 변수의 값을 여러 형식으로 변환하여 출력하는 기능을 갖고있다!

지시자는 값을 어떻게 출력할 것인지 지시해준다. 정수형 변수에 지정된 값을 10진수로 표현할 때 지시자 '%d'를 사용하며 변수의 값을 지정된 형식으로 변환해서 지시자 대신 넣는다.

public class printex1a {

	public static void main(String[] args) {
		System.out.println(10/3);

	}

}

결과값: 3

결과값이 왜 3인가요? 정수/정수를 했기 때문에 결과도 정수로 나옴!
그럼 실수로 나타내려면? 두 정수중 한쪽을 실수로 바꾸자,
그러면 3.3333333 처럼 길게 나온다.

  • 출력하려는 값이 2개면 지시자도 2개를 사용해야한다!
  • 출력될 값과 지시자의 순서도 일치해야한다!
  • %#o, %#x 처럼 사이에 #을 붙이면 접두사를 볼 수 있음

%o: 정수를 8진수로 출력
%d: 정수를 10진수로 출력
%x: 정수를 16진수로 출력
%f: 부동 소수점(실수)으로 출력
%c: 문자로 출력
%s: 문자열로 출력
%e: 지수로 출력
%g: 간략한 출력
%n: 줄바꿔 출력

String url = "https://velog.io/@irever1029";
double d = 1.23456789;

1. System.out.printf("d=%14.10f%n", d);
2. System.out.printf("[%40s]%n", url);
3. System.out.printf("[%-40s]%n", url);
4. System.out.printf("[%.8s]%n", url);

출력 결과

1. d=  1.2345678900
2. [            https://velog.io/@irever1029]
3. [https://velog.io/@irever1029            ]
4. [https://]
  1. %전체자리.소수점 아래자리f
  2. 전체 40자리
  3. 전체 40자리, 텍스트 왼쪽 정렬
  4. 왼쪽 정렬, 왼쪽에서 8글자만 출력

15. 정수형의 오버플로우

오버플로우란?

연산과정에서 해당 타입이 표현할 수 있는 값의 범위를 넘어서는것

  • 오버플로우가 발생했다고 에러가 발생하는것은 아님!
  • 예상했던 결과를 얻지 못할뿐임!

오버플로우를 쉽게 이해하려면 자전거 자물쇠를 생각해보자.

여기서 9999의 다음 숫자는 무엇일까?
바로 0000이다.

원래는 10000이 되어야하는데 5자리는 표현하지 못해 앞자리 1이 버려지기 때문이다.

반대로 최솟값 0000에서 1을 감소시키면?
9999가 된다.

마치 티비 채널처럼 마지막 채널 이후 처음 채널로 돌아가는 원리랑 비슷하다.

정수형 타입이 표현할 수 있는
최대값+1 -> 최소값
최소값-1 -> 최대값

16. 부호있는 정수의 오버플로우

부호없는 정수, 부호 있는 정수는 최대값과 최소값이 다르기 때문에 오버플로우의 발생 시점이 다르다!

부호없는 정수는 2진수로 0000이 될 때 오버플로우가 발생
부호있는 정수는 부호비트가 0에서 1이 될 때 오버플로우가 발생

17. 타입 간의 변환방법

숫자, 문자, 문자열 서로 변환 방법을 알아보자.
자주 사용하니까 꼭! 잘 익혀두도록 하자.

  1. 문자와 숫자간의 변환
    숫자->문자: 숫자에 0을 더한다.
    char 3 + '0' > '3'
    문자 성질을 덧씌우는 느낌으로 받아들이자.

반대로 문자->숫자 변환은
'3' - '0' > 3

  1. 문자열로의 변환
    숫자->문자열로 변환
    3 + "" > "3"
    문자->문자열로 변환
    '3' + "" > "3"

  2. 문자열을 숫자로 변환
    문자열->숫자
    Integer.parseInt("3") > 3
    Double.parseDoble("3.14") > 3.14
    문자열->문자
    "3".charAt(0) > '3'

문자3 + 1 =52 왜? 다음장에 설명.. 투비 컨티뉴

1 System.out.println(3 + '0');
2 System.out.println((char)3 + '0');
(char)

출력값 1-> 51
출력값 2-> 3
이 나온다.

왜 Why?
1. 문자 0('0')이 숫자로 48임. 문자와 숫자를 더할 수 없으니까 문자를 숫자로 바꿔서 계산한 값이 출력됨. 왜 48인지는 추후 설명...

  1. 숫자 앞에 (char)을 통해 형변환을 하면 숫자+문자 => 문자 '3'이 출력됨.

문자>문자열
문자열>문자
숫자>문자열
문자열>숫자

문자 3 + 1이 왜 52지? 대체 어떻게 해야 52가 나오는거;;

0개의 댓글

관련 채용 정보