// 남궁성의 자바의 정석 듣는 중//
- 모든 연산자는 연산 결과를 반환한다.
so,()는 연산자가 아님.
- 연산자의 우선순위는 이미 결정되어 있는데 순서 바꾸고 싶으면 () 사용해서 수동 결정.
- 사실 이미 다 아니깐,, 상식대로 생각해.
- 우선 순위가 같은 연산자의 경우 대입이랑 단항 연상자 제외하고 왼쪽 --> 오른쪽
- 증감 연산자 단독으로 쓰이면, 전위형 후위형 차이 X
-
int i = 5;
i++;
System.out.println(i); //6
i=5;
++i;
System.out.println(i); //6
int i =5, j=0;
j = i++; //후위형 postfix
// j=i
// i++;
System.out.println(i); //i=6
System.out.println(j); //j=5
i=5;
j=0;
j = ++i; //전위형 prefix
//++i;
//j=i
System.out.println(i); //j=6
System.out.println(j); //j=6
- 부호 연산자는 그냥 부호만 바뀌는 것임 (단항 연산자).
- +는 걍 -음수 구분하려고 넣은 것임. 안 쓰잖아 없으면 양수니까.
피연산자가 2개 필요한 게 아니라서 구분 가능.
- d는 8바이트고, int는 4바이트라서 int 정수로 읽어올 때 소수점을 버리고 85만 읽어줌.
단지 읽어 준 것 뿐이지, d 값이 변화한게 아님. 여전히 85.4
- 숫자나, 문자 별로 부여된 코드를 보면 순서대로 되어 있음.
- 정수로 바뀔 때 반올림 없는 것 기억.
- 실수로 바뀔 때는 소수점 넣고 f만 붙이면 됨
- 자동 형변환: 컴파일러가 자동으로 형 변환 해줌.
- 큰 쪽으로 넣어주는 것은 ok. 원래는 양 쪽의 타입이 맞아야 하지만, 갠춘
- 반대는 x. --> 값 손실이 발생하기 때문에
-> then, 수동으로 해줘야 함. 3을 i에 저장해줌. => 큰 값을 작은 값에 넣을 때만.
- 실수형이 더 크기 때문에 롱보다 플롯이 큼
- 100은.. 바이트 타입의 범위인 -128~127사이라서 int지만 byte로 자동 형변환 해줌
- 근데 i로 변수화 시키면, 변수 값이 달라질 수 있다고 컴퓨터가 판단하기 때문에, 상수가 아니니깐, 에러가 뜨고, 수동으로 변환해줘야 함.
- 혹은, 바이트 변수 범위를 넘어서면, 수동 해줘야 하고 이땐 값 손실 감수 해야 함.
- 컴퓨터는 같은 타입끼리만 계산이 되어서.. int/int --> int
- 둘 다 바꿔도 되지만, 걍 어느 한쪽만 바꿔도 변화됨.
- 범위가 너무 작으면 쉽게 오버플로우가 발생하니깐, 일단 큰 타입으로 바꿔 놓는 것.
1) 두 피연산자 타입을 큰 값으로 일치
2) int보다 작으면 무조건 int로 변환
- 이게 그니깐. 좀 복잡하네?
- 앞서, '0'을 빼면 정수로 해당 정수로 바뀌었던 이유가 유니코드 때문임.
- '2'-'0' = 50-48 =2가 되는 것.
- 코드 값은 순서대로 배치가 되어 있기 때문에, 실제 값과 상관 없이 시작점인 0과의 차이가 할당된 문자 값과 일치함.
- so, char는 int보다 작으니깐 무조건 int로 값이 변환되고,
- 숫자 2가 결과 값임.
- 반면에, '2'를 (int)로 형변환하면 유니코드에 따라서 50임.
- 백만은 10 의 6승이니깐 a*b는 10의 12승임.
- 근데 int의 범위는 10의 9제곱이라서 오버플로우가 됨.
- c를 형변환 해봤자, 이미 잘못된 값이 들어간 것이기 때문에 a나 b를 형변환 해야 하고
둘 중 아무거나 해도 상관 없음.
- 둘 다 하면 귀찮으니깐 하나만 하면 됨.
++ 대략적인 0단위랑 범위는 기억해야 할 듯..
- 그니깐 기본적으로 소수점은 소수점이어야 함. 제발
- int는 int끼리. 끼리끼리 할 것.
double pi = 3.141592; //3.141 얻으려면?
System.out.println((int)(pi*1000)); //3141
System.out.println((int)(pi*1000)/1000.0); //3.141
- /하면 몫이 남고, %하면 나머지가 남음.
- 무조건 정수만 가능하고, 부호는 무시되고 양수로 계산됨.
'Web Developing > Java' 카테고리의 다른 글
[Java] 조건문과 반복문: if, if else if, switch문 // for, while, do-while문 (1) | 2024.03.29 |
---|---|
[java] 비교연산자 (0) | 2024.03.20 |
[java] 오버플로우, 타입 간 변화 (0) | 2024.03.17 |
[java] Scanner, 진법 추가 (3) | 2024.03.17 |
[Java] printf()의 지시자 (0) | 2024.03.15 |