λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“— Book/μžλ°”μ˜ 정석

3-3μž₯ μ‚°μˆ  μ—°μ‚°μž

by hyeon-z 2023. 3. 14.

 

사칙 μ—°μ‚°μž:  +, -, *, /

λ‚˜λ¨Έμ§€ μ—°μ‚°μž:  %

 

μš°μ„ μˆœμœ„: *, /, % > +, -

 

1. 사칙 μ—°μ‚°μž +  -  *  /

μ£Όμ˜ν•΄μ•Ό λ˜λŠ” λΆ€λΆ„

 

1. intν˜•μœΌλ‘œ λ‚˜λˆ„λŠ” κ²½μš°μ—λŠ” μ†Œμˆ˜μ μ„ 버린닀.

int a = 10;
int b = 4;

System.out.println(a / b);  // 2

 

2. ν”Όμ—°μ‚°μžκ°€ μ •μˆ˜ν˜•μΈ 경우, λ‚˜λˆ„λŠ” 수둜 0을 μ‚¬μš©ν•  수 μ—†λ‹€.

뢀동 μ†Œμˆ˜μ  값인 0.0f, 0.0d둜 λ‚˜λˆ„λŠ” 것은 κ°€λŠ₯ν•˜μ§€λ§Œ κ·Έ κ²°κ³ΌλŠ” λ¬΄ν•œλŒ€μ΄λ‹€.

System.out.println(3 / 0); // μ‹€ν–‰ν•˜λ©΄, 였λ₯˜(ArithmeticException) λ°œμƒ
System.out.println(3 / 0.0); // Infinityκ°€ 좜λ ₯됨

 

3. byte μ—°μ‚° μ—λŸ¬ λ°œμƒ

byte a = 10;
byte b = 20;
byte c = a + b;  // 컴파일 μ—λŸ¬ λ°œμƒ

System.out.println(c);

μ•„κΉŒ μœ„μ—μ„œ λ‹€λ€˜λŠ”λ° intν˜•λ³΄λ‹€ μž‘μ€ byteν˜•μ€ μ‚°μˆ  λ³€ν™˜ μ‹œ int둜 ν˜•λ³€ν™˜ λœλ‹€.

a + b의 μ—°μ‚° κ²°κ³Ό: byteν˜•μ΄ μ•„λ‹Œ intν˜•(4byte)

μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” λΆ€λΆ„μ—μ„œ intν˜•μ„ byteν˜•μ— λŒ€μž…ν•˜κ³  μžˆλ‹€. → 더 μž‘μ€ μžλ£Œν˜•μ— λ³€μˆ˜λ₯Ό μ €μž₯ν•˜λ €λ©΄ λͺ…μ‹œμ μœΌλ‘œ ν˜• λ³€ν™˜ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€!

byte c = (byte) a + b; 둜 μˆ˜μ •ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€.

 

4. μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Ό

int a = 1_000_000;  // 1,000,000 1백만
int b = 2_000_000;  // 2,000,000 2백만
long c = a * b;  // -1454759936 μ˜ˆμƒκ³Ό λ‹€λ₯Έ κ²°κ³Ό

System.out.println(c);

a * b 연산을 μ§„ν–‰ν•˜λ©΄ κ·Έ κ²°κ³Ό 값은 intν˜•μ΄λ‹€.

a * b의 연산을 톡해 λ²”μœ„λ₯Ό λ„˜μ–΄μ„  -1454.. 의 값이 λ‚˜μ˜€κ²Œ λ˜λ―€λ‘œ longνƒ€μž…μ— λ‹€μ‹œ 넣어도 같은 값을 좜λ ₯ν•˜κ²Œ λœλ‹€.

 

5. 같은 μ˜λ―ΈλΌλ„ λ‹€λ₯Έ κ²°κ³Όλ₯Ό 얻을 수 μžˆλ‹€.

int a = 1000000;
int resultl = a * a / a; // 1000000 * 1000000 / 1000000
int result2 = a / a * a; // 1000000 / 1000000 * 1000000

System.out.printf(result1);  // μ΄μƒν•œ κ²°κ³Όκ°’
System.out.printf(result2);  // μ œλŒ€λ‘œλœ κ²°κ³Όκ°’

result1은 * 계산을 ν•  λ•Œ 이미 λ²”μœ„λ₯Ό λ„˜μ–΄μ„œ μ΄μƒν•œ κ²°κ³Ό 값이 λ‚˜μ˜€κ²Œ 되고

result2λŠ” / 계산을 λ¨Όμ € μ§„ν–‰ν•˜μ—¬ λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ μ˜ˆμƒν•œ κ²°κ³Ό 값이 λ‚˜μ˜¨λ‹€.

 

λ¬Έμžν˜• 계산

 

λ¬ΈμžλŠ” ν•΄λ‹Ή 문자의 μœ λ‹ˆμ½”λ“œ(λΆ€ν˜Έ μ—†λŠ” μ •μˆ˜)둜 λ°”λ€Œμ–΄ μ €μž₯λ˜λ―€λ‘œ μ‚°μˆ μ—°μ‚°μ΄ κ°€λŠ₯ν•˜λ‹€.

0 ~ 9, A ~ Z, a ~ z μ—°μ†μ μœΌλ‘œ λ°°μΉ˜λ˜μ–΄ 있기 λ•Œλ¬Έμ— 처음 κ°’ 0 , a , A λ₯Ό λΉΌμ„œ λͺ‡ 번째 μˆ˜μΈμ§€ ꡬ할 수 μžˆλ‹€.

ex) '9' - '0' = 9

 

char c1 = 'a';
// char c2 = c1 + 1; // μ»΄νŒŒμΌμ—λŸ¬ λ°œμƒ!
char c2 = 'a'+ l; // μ»΄νŒŒμΌμ—λŸ¬ μ—†μŒ

System.out.println(c2);

char c2 = c1 + 1; 은 μ•„κΉŒ μœ„μ—μ„œ λ§ν–ˆλ˜ ν˜•λ³€ν™˜ 문제둜 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. (λ³€μˆ˜λ‘œ λ“€μ–΄κ°„ 경우)

'a'+ 1: λ¦¬ν„°λŸ΄ κ°„μ˜ μ—°μ‚° → μ‹€ν–‰ κ³Όμ • λ™μ•ˆ 값이 λ³€ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 컴파일 μ‹œμ— κ³„μ‚°λœλ‹€.

μ»΄νŒŒμΌλŸ¬κ°€ 미리 λ§μ…ˆ 연산을 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ μ‹œμ—λŠ” λ§μ…ˆ 연산을 ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

- μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄μ„œ μ΅œμ ν™”λœ μ½”λ“œ

 

- μ†Œλ¬Έμž → λŒ€λ¬Έμž λ³€κ²½

char lowercase = 'a';
char uppercase = (char)(lowercase - 32);

μ†Œλ¬Έμž μ•ŒνŒŒλ²³μ˜ μœ λ‹ˆμ½”λ“œλŠ” 같은 λŒ€λ¬Έμž μ•ŒνŒŒλ²³μ˜ μœ λ‹ˆμ½”λ“œλ³΄λ‹€ 항상 32κ°€ 크닀.

 

반올림 계산

 

- 0.5 λ”ν•˜κΈ°

double pi = 3.141592;
double shortPi = (int)(pi * 1000 + 0.5) / 1000.0;

System.out.println(shortPi);  // 3.142

μ›λž˜ intν˜• 연산은 μ†Œμˆ˜μ μ„ λ²„λ¦¬μ§€λ§Œ 0.5λ₯Ό λ”ν•˜μ—¬ 반올림된 κ²°κ³Ό 값을 ꡬ할 수 μžˆλ‹€.

 

- Math.round()

double pi = 3.141592;
double shortPi = Math.round(pi * 1000) / 1000.0;

System.out.println(shortPi);  // 3.142

roundλ©”μ„œλ“œλŠ” λ§€κ°œλ³€μˆ˜λ‘œ 받은 값을 μ†Œμˆ˜μ  첫째 μžλ¦¬μ—μ„œ λ°˜μ˜¬λ¦Όμ„ ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό μ •μˆ˜λ‘œ λŒλ €μ€€λ‹€.

 

2. λ‚˜λ¨Έμ§€ μ—°μ‚°μž %

μ™Όμͺ½μ˜ ν”Όμ—°μ‚°μžλ₯Ό 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžλ‘œ λ‚˜λˆ„κ³  λ‚œ λ‚˜λ¨Έμ§€ 값을 결과둜 λ°˜ν™˜

* λ‚˜λˆ„λŠ” 수둜 0을 μ‚¬μš©ν•  수 μ—†λ‹€.

 

- 음수둜 λ‚˜λˆŒ 수 μžˆλ‹€

System.out.println(-10 % 8);   // -2
System.out.println(10 % -8);   // 2
System.out.println(-10 % -8);  // -2

 

 

Reference

μžλ°”μ˜ 정석 - 남ꢁ μ„±

'πŸ“— Book > μžλ°”μ˜ 정석' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

3-5μž₯ 논리 μ—°μ‚°μž  (1) 2023.03.14
3-4μž₯ 비ꡐ μ—°μ‚°μž  (0) 2023.03.14
3-2μž₯ 단항 μ—°μ‚°μž  (0) 2023.03.14
3-1μž₯ μ—°μ‚°μž  (1) 2023.03.14
2-5μž₯ ν˜• λ³€ν™˜  (0) 2023.03.09

λŒ“κΈ€