자신에게 친절할 것 :)

Web Developing/Java

[java] 연산자 operator, 형변환, 사칙 연산자

Tashapark 2024. 3. 18. 23:04
728x90

// 남궁성의 자바의 정석 듣는 중//

 

- 모든 연산자는 연산 결과를 반환한다.

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

- /하면 몫이 남고, %하면 나머지가 남음. 

- 무조건 정수만 가능하고, 부호는 무시되고 양수로 계산됨. 

728x90
반응형