on my way

이것이 자바다 Chapter03. 연산자 본문

Computer Science/JAVA

이것이 자바다 Chapter03. 연산자

wingbeat 2024. 3. 13. 16:32
반응형

3.1 부호/증감 연산자

부호 연산자

+ (피연산자) : 부호유지

- (피연산자) : 부호 변경

증감 연산자

++(피연산자) : 피연산자의 값을 1 증가

-- (피연산자) : 피연산자의 값을 1 감소

(피연산자)++ : 연산 수행 후 1 증가

(피연산자)-- : 연산 수행 후 1 감소

package ch03.sec01;

public class SignOperatorExample {

	public static void main(String[] args) {
		int a=1;
		/*
		 * 전위 연산 : 현재 실행문이 실행되기 전
		 * 후외 연산 : 현재 실행문이 실행된 후
		 */
		int b = a++;
		System.out.println(a);
		System.out.println(b);
		System.out.println(a++);
		System.out.println(a);
	}

}

 

3.2 산술 연산자

%는 나머지를 산출한다.

피연산자가 정수타입(byte, short, char, int)면 연산의 결과는 int

정수+long -> long

?+실수 -> 실수

 

3.3 오버플로우와 언더플로우

오버플로우 : 타입이 허용하는 최대값을 벗어나는 것

언더플로우: 타입이 허용하는 최소값을 벗어나는 것

byte value = 127;
value++;
System.out.println(value);	//-128

byte value = -128;
value--;
System.out.println(value); //127

byte의 경우 -128~127

최소 최대로 돌아간다.

 

3.4 정확한 계산은 정수 연산으로

정수 연산

산술 연산을 정확히 하려면 실수타입을 사용하지 않는 것이 좋다.

 

package ch03.sec04;

public class AccuracyExample1 {

	public static void main(String[] args) {
		int apple = 1;
		int pieceUnit = apple * 10;
		int num = 7;
		
		int result = pieceUnit - num ;
		System.out.println("사과 1개에서 남은 양: "+result/10.0);
		System.out.println("10조각에서 남은 조각: "+result);
		
//		int apple = 1;
//		double pieceUnit = 0.1 * 10;
//		int num = 7;
//		
//		double result = apple - num * pieceUnit;
//		System.out.println("사과 1개에서 남은 양: "+result);
		
	}
}

 

3.5 나눗셈 연산 후 NaN과 Infinity 처리

참조 자료형은 메모리에 q라고 저장을 해두면 a라는 변수가 q를 저장한 1번 주소를 가리키고 있다.

new 하면 새로운 객체를 생성한다. b는 q를 저장한 2번을 가리키고 있다.

참조 자료형에서는 값을 비교하는게 아니라 주소값을 비교한다.

		int score = 80;
		System.out.println(score/100.0);
		
//		int cnt = 0;
//		System.out.println(score/cnt);
		
		String data = new String("q");
		System.out.println(data == "q"); // 가능하지만 아래 지향
		System.out.println("q".equals(data));
		// . 앞에는 객체 or 클래스만 가능하다.
		
		String data1 = ""; //아무것도 안든 문자가 있다
		String data2 = null; //값 자체가 없다.
		System.out.println(data2 == "q"); 
//		System.out.println(data2.equals("q")); //에러
		System.out.println("q".equals(data2));

 

3.6 비교 연산자

		String data2 = null; //값 자체가 없다.
		System.out.println(!"q".equals(data2));
		
		boolean b = true;
		System.out.println(!b); //false 반대

문자열은 ==, != 대신 equals() or !equals() 사용

 

3.7 논리 연산자

AND && or & : 둘 다 true여야 결과 true

OR | or || : 둘 중 하나만 true이면 true, 둘다 false면 false

XOR ^ : 두개가 달라야 true, 같으면 false

NOT ! : 논리값을 바꿈

		int math = 80;
		int eng = 60;
		boolean e = math >= 70 ^ eng >= 70;
		System.out.println(e);

 

&과 &&의 연산과정

&은 앞의 결과가 틀려도 뒤를 확인하고, &&은 앞의 결과가 틀리면 뒤를 확인하지 않고 결과를 산출한다.

 

3.8 비트 논리 &이동 연산자

2진수끼리의 연산 => &, |, ^, ~(not)

a<<b : a의 각 비트를 b만큼 왼쪽이동. 오른쪽 빈자리는 0. a*2^b

a>>b : a/2^b

a>>> b : a의 각 비트를 오른쪽으로 이동, 왼쪽 빈자리는 0

 

int result = 1<<3; //2^3 = 8

int result = -8>>3; //-8/2^3 = -1

 

3.10 대입 연산자

		int f = 1;
		f++;
		f+=1;
		f=f+1;
		f*=3;
		int h = f;
		System.out.println(h);

 

3.11 삼항(조건) 연산자

		score = 60;
		//score 60이상 합격, 미만 불합격
		String grade = score >= 60 ? "합" : "불합";
		System.out.println(grade);
		//score 60이상 합, 30이상 60미만 재시, 30미만 유급
		grade = score >= 60 ? "합" : 
			score>=30 && score <60? "재시" : "유급";
		System.out.println(grade);

 

3.12 연산의 방향과 우선순위

소괄호의 우선순위가 제일 높다.


 

확인 문제

 

 

반응형