728x90
1. 두 변수 값 서로 바꾸기
변수의 값을 지정할 때 가장 중요한 부분은 한 변수에 하나의 값만 넣을 수 있다는 점이다. 이때 두 변수가 존재하고 각각 다른 값이 넣어져있을 때 서로 바꾸기 위해서는 어떻게 하면 좋을까?
아래처럼 새로운 변수인 tmp 를 하나 새로 만들고 tmp 에부터 천천히 x 와 y 값을 천천히 넣어준다.
- 참고로 이 문제는 정보처리기사 필기 / 실기에서 종종 출시되는 문제 중 하나이다.
int x = 4, int y = 5
int tmp;
tmp = x; // 1. x의 값을 tmp에 저장
x = y; // 2. y의 값을 x에 저장
y = tmp; // 3. y값에 tmp 즉 x 값을 저장
System.out.println("x값은 : "+x);
System.out.println("y값은 : "+y);
//출력
x값은 : 5
y값은 : 4
이때 다시 한 번! 중요한 점은 하나의 변수에는 하나의 값만 넣어진다는 점.
2. 기본형 표현 범위 = 2진수로 표현하기
- byte : 1byte = 8 bit ⇒ 이때 1bit 는 2진수 한 자리(0, 1 중 하나)로 표현됨, 또한 맨 앞 1bit 는 양수인지(0 으로 표현) 음수인지(1 로 표현) 알려줌0 | 000110
- 즉 byte b 라는 변수에 3 이라는 값을 저장하면 , 10진수 3이 2진수로 변환되어 011 로 바뀌어 저장되며, 3은 양수이기 때문에 맨 앞 1bit 는 0 이 되어 다음처럼 표현된다
- n비트로 표현 할 수 있는 값의 갯수 : 2^n개
- n비트로 표현 할 수 있는 부호 없는 정수(양수)의 범위 : 0 ~ 2^n-1 ⇒ 8비트로 표현 할 수 있는 범위 : 0 ~ 2^8 - 1 = 0 ~ 255
- n비트로 표현 할 수 있는 부호 있는 정수의 범위 : -2^(n-1) ~ 2^(n-1)
기본형 | byte | 표현 범위 |
byte | 1 byte = 8 bit | -2^7 ~ 2^7-1 |
short | 2 byte = 16 bit | -2^15 ~ 2^15-1 |
int | 4 byte = 32 bit | 0 ~ 2^16-1 => 약 20억 |
long | 8 byte = 64 bit | -2^63 ~ 2^63-1 => 약 800경 |
char | 2 byte = 16 bit | 0 ~ 2^16-1 |
float | 4 byte = 32 bit | -3.4*10^38 ~ 3.4*10^38 |
double | 8 byte = 64 bit | 4.9E-324 ~ 1.8E308 |
여기서 문제! 분명 float 와 int 는 똑같은 4byte 인데 왜 float 의 범위가 더 클까?
이는 float의 표현방법에 있다. float은 값을 저장 시 부호+지수+가수 형식이로 저장되기 때문에 int 보다 더 큰 범위를 저장 할 수 있다고 한다. 다만 이러한 방법 값을 저장할 때 오차가 발생하는 단점이 존재하기도 한단다.
이때 float << double 이 더 정밀도가 높다. 정밀도도 높고, 범위도 크기 때문에 double 가 실수 표현 시 기본형이 된 듯
3-1. 형식화된 출력 - printf()
printnl() 의 단점 : 출력 형식 지정 불가, 즉 printnl 을 사용 할 겨우 '실수의 자리수 조절 불가' 및 10진수로만 출력된다는 단점이 있다.
그러나 printf(() 의 경우 출력 형식을 따로 지정 가능하다.
// printnl 의 경우 => 출력 형식 지정 불가
System.out.printnl(10.0/3) // 3.33333333***** => 로 출력됨
System.out.printnl(0x1A) // 26 => 10 진수로 출력됨
//printf 의 경우 출력 => 출력 형식 지정 가능
System.out.printf("%
System.out.printf("%d", 0x1A) // 26
System.out.printf("%x", 0x1A) // 1A
3-2. printf() 지시자 목록과 사용 방법
- 지시자 목록
사용 종류 | 지시자 종류 | 출력 형식 |
정수 | %b | boolean 형식으로 출력 |
%d | 10진수 형식으로 출력 | |
%o | 8진수 형식으로 출력 | |
%x, %X | 16진수 형식으로 출력 | |
Integer.toBinaryString() | 2진수 형식으로 출력 | |
실수 | %f | 부동 소수점 형식으로 출력 |
%e, %E | 지수 표현식의 형식으로 출력 | |
문자 | %c | 문자 형식으로 출력 |
%s | 문자열 형식으로 출력 |
- 활용 방법
double a = 10.0/3;
System.out.printf("%.3f", a); // 0.3333 => 소숫점 3자리까지만 출력됨
System.out.printf("%.3e", a); // 3.3333e+00 => 지수 형식으로 출력
System.out.printf("%.4g \n", a); // 3.333 => %f 보다 간단하게 나오게할때?
System.out.printf("%d", 15); // 15 => 10진수 출력
System.out.printf("%o", 15); // 17 => 8진수 출력
System.out.printf("%x", 15); // f => 16진수 출력
System.out.printf("%s", Integer.toBinaryString(15)); // 1111 => 2진수로 출력
System.out.printf("%#x", 15); // # 을 붙이면 접두사가 붙어서 출력됨
System.out.printf("[%5d]%n", 10); // [ 10] => 오른쪽으로 정렬되어 출력
System.out.printf("[%-5d]%n", 10); // [10 ] => 왼쪽으로 정렬되어 출력
double dd = 1.23456789;
System.out.printf("%.5f", dd); // 1.23457 => 1.23456 이 아닌 1.23457 인 이유는 6이 반올림되어 출력되기 때문
String s = "terianp.tistory.com";
System.out.printf("%s%n", s); // terianp.tistory.com
System.out.printf("[%-30s]%n", s); // [terianp.tistory.com ] => 왼쪽으로 정렬
System.out.printf("[%30s]%n", s); // [ terianp.tistory.com] => 오른쪽으로 정렬
System.out.printf("[%.7s]%n",s); // [terianp] => 일부만 출력
- 보통 실수를 출력하는 경우는 변수 타입은 double(float 보다 double 가 정밀도가 더 높기 때문에), 지시자 %f 를 많이 사용하고, 실수를 사용 시 0이 많은 경우 %e 지시자를 사용한다.
- %g 같은 경우 %f 보다 간단하게 표현하고자 할 때 사용한다.
- %n \n 모두 개행 문자로 출력 시 1줄 줄바꿈하여 표현되도록 한다.
- %와 지시자 사이에 아래 형식을 넣으면 출력 형식을 살짝 바꿀 수 있다.
- %전체자리.소수점아래자리f ⇒ %5.3f 면 전체 5자리 중 소숫점은 3자리만 출력한다.
- %숫자s : 숫자만큼 오른쪽 정렬 ⇒ %5s : 전체 5만큼 출력하고 0이 들어갈 자리는 빈칸으로 둠 즉, 오른쪽으로 정렬됨
- %-숫자s : 숫자만큼 왼쪽 정렬 ⇒ %-5s : 전체 5만큼 출력하고 0이 들어갈 자리는 빈칸으로 둠 즉, 왼쪽으로 정렬됨
- %.숫자s : 숫자만큼 문자열 부분 출력 ⇒ %.3s : 3만큼만 문자열이 출력됨
'Java - 기본기' 카테고리의 다른 글
Java 입출력(I/O), 스트림(Stream), 버퍼(Buffer) 개념 및 사용법 (2) | 2021.09.26 |
---|---|
5. 반올림-Math.round(), 비교, 조건, 논리, 대입, 복합 대입 연산자 (0) | 2021.09.16 |
4. 증감 연산자, 부호 연산자, 형변환 , 자동 형변환 + 아스키코드 (0) | 2021.09.13 |
3. Scanner 사용, 정수형 오버플로우, 타입 간 변환, 연산자와 종류 (0) | 2021.09.09 |
1. 변수와 변수 타입 (3) | 2021.08.28 |
댓글