최대값
을 벗어나는 것최소값
을 벗어나는 것정수 타입의 최댓값, 최솟값
으로 변환package javastudy.day02.operator;
/*오버플로우/언더 플로우
- 오버 플로우란? 타입이 허용하는 최댓값을 벗어나는 것
- 언더플로우란? 타입이 허용하는 최솟값을 벗어나는 것
정수타입 연산 오버플로우나 언더플로우가 발생하면 에러가 발생하지 않고, 해당 정수 타입의 최댓값, 최솟값으로 변환
*/
public class OverflowUnderflowEx
{
public static void main(String[] args)
{
//오버플로우 : 최대값을 벗어나 작은 허용범위 숫자로 변경
byte var1 = 125;
for(int i = 0; i<5; i++) {
var1++;
System.out.println("var1 : "+var1); // 126, 127, -128, -127 -126
}
System.out.println("-------------------");
//언더플로우 : 최소값을 벗어나 높은 허용범위 숫자로 변경
byte var2 = -125;
for(int i = 0; i<5; i++) {
var2--;
System.out.println("var2 : " + var2); //-126, -127, -128, 127, 126
}
//허용범위가 넘어가게 됨
int var3 = 1000000;
int var4 = 1000000;
int var5 = var3 * var4;
System.out.println(var5); //-727379968
}
}
실수 타입
을 사용하지 않는 것이 좋음package javastudy.day02.operator;
public class AccuracyEx
{
public static void main(String[] args)
{
// result를 아예 실수형으로 쓰지말고 result/10.0 이런식으로 사용
int apple = 1;
int totalPieces = apple * 10;
int number = 7;
// 10조각에서 남은 조각수 => 3
// 사과 1개에서 남은 양 => 0.3
int result = totalPieces - number;
System.out.println(result); //3
System.out.println(result/10.0); //0.3
}
}
int x = 5;
* int y = 0;
* int result = 5/0;
* System.out.println(result); //에러
Infinity
나옴 : 무한대int x = 5;
double y = 0.0;
double result = x/y; //나누기 Infinity(무한대) 결과
System.out.println(result);
NaN(Not a Number)
=> 더 이상 나아갈 수 없음 절대 나오게 하면 안됨데이터가 엉망이 됨
int x = 5;
double y = 0.0;
double result = x%y; //NaN => 더 이상 나아갈 수 없음 절대 나오게 하면 안됨
System.out.println(result);
Double.isInfinite()
와 Double.isNaN()
를 사용해 /와 % 연산의 결과가 Infinity 또는 NaN인지 먼저 확인하고 다음 연산을 수행하는 것이 좋음package javastudy.day02.operator;
public class ArithmeticNaN_Infinity_Ex
{
public static void main(String[] args) {
int x = 5;
double y = 0.0;
double result = x/y;
/*
* 나눗셈을 할 때 꼭 Double.isInfinite()와 Double.isNaN()를 사용해 /와 % 연산의 결과가 Infinity 또는
* NaN인지 먼저확인하고 다음 연산을 수행하는 것이 좋음
*/ if(Double.isInfinite(result||Double.isNaN(result))) {
System.out.println("값 산술 불가");
}
else {
System.out.println(result + 2);
}
}
&&
: AND||
: OR^
: XOR~
: NOnext()
: 문자열 추출charAt(인덱스)
: 인덱스 번째에 있는 문자형을 찾아냄boolean c = (a != 0);
//a의 논리값 실행package myPractice;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int x = 2;
int y = 5;
char c = 'A';
System.out.println(1+x<<33); //6 +가 먼저고 시프트가 뒤
System.out.println(y>=5 || x<0 && x>2); //true (true||false) => &&가 ||보다 우선 순위 높아서 먼저함 + 비교가 논리보다 우선순위 높음
System.out.println(y +=10 - x++); //13 1. 증감(후치라 2를 반환후 10 - x 후 증가됨) 2. 산술 3. 대입이 맨 마지막
System.out.println(x+=2);//5 x= 3이니까 3+2 = 5
System.out.println(!('A' <= c&& c<='Z')); //false !(true&&true) = false
System.out.println('C'-c); //2 'C' = 67 c = 65 이항연산자는 숫자로 변환
System.out.println('5'-'0'); //5 아스키 코드 5 : 53 - 0 : 48
System.out.println(c+1);//66 65+1
System.out.println(++c);//B
System.out.println(c++);//B
System.out.println(c);//C => C
}
}
(a>b)?1:0
(num > 0) ? "양" : (num < 0) ? "음수" : "0";
&&, ||, ^, !
&, |, ^, ~
byte, short, int, long
만 피연산자가 될 수 있고, 실수형이 float, double
은 피연산자 불가<<
: 왼쪽 시프트>>
: 오른쪽 시프트8>>32 = 8
(byte)
로 변환해줘야 함
github
에 올릴 예정for (초기식1; 조건식1; 증감식1) {
for (초기식2; 조건식2; 증감식2) {
// 내부 반복문의 실행 코드
}
// 외부 반복문의 실행 코드
}
내부 반복문
은 외부 반복문의 한 번의 반복마다 전체 반복
github
에 올릴 예정어후.. 8시간 듣고 복습하는게 여간 힘든게 아니다.. 좀 더 이쁘게 잘 보이게 정리하고 싶은데 아직은 쉽지 않다 다중 for문이 너무 헤갈리고 소스트리로 예제들 github에 올릴려는데 충돌나고 조금 더 만져봐야 할 것 같다. 문제를 더 다양하게 풀어봐야 할 듯하다 조금씩 감이 오는 느낌..