일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준파이썬
- 자바연산자
- 변수
- 코드업
- Algorithm
- Literal
- 코드업자바
- 코딩테스트
- 코드업100제
- SWEA파이썬
- C#변수
- 사용자입력
- 코드업100제자바
- 알고리즘
- 자바
- 제어구조
- Java
- SWEA
- VARIABLE
- 리터럴
- c#
- 자바클래스
- 수학연산
- 디자인패턴
- Codeup
- 기초프로그래밍
- 백준
- C#프로그래밍
- 개발입문
- 프로그래머스파이썬
- Today
- Total
제니노트
정수형의 오버플로우 [자바] 본문
오버플로우 : 해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우(overflow)라고 한다.
10진수 -> 9999 +1 // 오버플로우 발생
2진수 - > 1111 +0001 // 오버플로우 발생
오버플로우는 자동자 주행표시기, 계수기와 비슷하다.
최댓값 9999 다음의 숫자는 0000이 될 것이다.
최솟값 0000에서 1을 감소하면 9999가 될 것이다.
이는 마치 계수기를 거꾸로 돌리는 것과 같다. 0000에서 정방향으로 돌리면 0001이 되지만, 역방향으로 돌리면 9999가 되는 것이다.
최대값 + 1 -> 최소값
최소값 -1 -> 최대값
최대값이 10진수로는 9999 2진수로는 1111일텐데 여기서 1을 더하면 0000이 된다는 것
최소값이 0000일 때 1을 빼면 10진수로 9999, 2진수로는 1111이 된다는 것이다.
최소값과 최대값이 이어졌다고 생각하면 된다.
최대값이 2진수 1111라고 하면 +1 을 해주면 0000 즉 최소값이 되고
최소값이 2진수 0000라고 하면 -1 해주면 1111 즉 최대값이 된다.
부호없는 정수의 경우 표현범위가 0~15이다.
부호있는 정수의 경우 표현범위가 -8~7이다.
부호없는 정수의 경우
최대값 15 +1 을 하면 최소값 0이 된다.
최소값 0 - 1을 하면 최대값 15가 된다.
부호있는 정수의 경우
최대값 7+1을 하면 최소값 -8이 된다.
최소값 -8 -1 을 하면 최대값 7이 된다.
import java.util.Scanner; //1.import문 추가
public class ScanfEx1 {
public static void main(String[] args) {
short sMin = -32768; //부호있는 정수(2byte)
short sMax = 32767;
char cMin = 0; //부호없는 정수(2byte)
char cMax = 65535;
//2byte = 16bit = 2^16 = 65536
//short - > -32768~32767
//char - > 0 ~ 65535
System.out.println("sMin = "+sMin); //-32768
System.out.println("sMin-1="+(short)(sMin-1));//-32767
System.out.println("sMax ="+sMax);//32767
System.out.println("sMax+1 ="+(short)(sMax+1));//-32768
System.out.println("cMin = "+(int)cMin);//0
System.out.println("cMin-1 = "+(int)--cMin);//65535
System.out.println("cMax = "+(int)cMax);//65535
System.out.println("cMax+1 = "+(int)++cMax);//0
}
}
short와 char 크기는 모두 16bit이므로 표현할 수 있는 값의 개수 역시 2^16개(65535개,약 6만개)이다.
그러나 short는 이 중 절반 2^15(32768,약 3만개 )개를 음수를 표현하는데 사용하고
char는 전체(2^16개 = 65535+1개) 를 양수(65535), 0(1개)를 표현하는데 사용한다.
short : -2^15~ 2^15-1(32768~32767) // 부호있는 정수
char : 0~2^16-1 (0~65535) //부호없는 정수
출처: https://www.youtube.com/watch?v=XXq_uCic22Y&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=22
'Java > Java 입문' 카테고리의 다른 글
변수 중요 개념 [자바] (0) | 2023.05.31 |
---|---|
타입간의 변환방법 [자바] (0) | 2023.05.30 |
화면에서 입력받기 - Scanner [자바] (0) | 2023.05.30 |
printf()에 대하여 [자바] (0) | 2023.02.26 |
classpath 설정하기 [자바] (0) | 2023.02.23 |