[JAVA] 3. 진법

2022. 4. 1. 22:33ㆍJAVA/μžλ°”μ˜ 정석

728x90

 

1️⃣ λΉ„νŠΈμ™€ λ°”μ΄νŠΈ 

ν•œ 자리의 2μ§„μˆ˜λ₯Ό λΉ„νŠΈbit라고 ν•˜κ³ , 1λΉ„νŠΈλŠ” 컴퓨터가 값을 μ €μž₯ν•  수 μžˆλŠ” μ΅œμ†Œλ‹¨μœ„μ΄λ‹€. 

근데 1λΉ„νŠΈλŠ” λ„ˆλ¬΄ μž‘μ€ λ‹¨μœ„μ΄κΈ° λ•Œλ¬Έμ— 1λΉ„νŠΈ 8개λ₯Ό λ¬Άμ–΄μ„œ λ°”μ΄νŠΈbyteλΌλŠ” λ‹¨μœ„λ‘œ μ •μ˜ν•΄μ„œ λ°μ΄ν„°μ˜ κΈ°λ³Έ λ‹¨μœ„λ‘œ μ‚¬μš©ν•œλ‹€. 

 

이 외에도 μ›Œλ“œ wordλΌλŠ” 단어가 μžˆλŠ”λ° μ›Œλ“œλŠ” CPUκ°€ ν•œλ²ˆμ— μ²˜λ¦¬ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ 크기λ₯Ό μ˜λ―Έν•œλ‹€. 

 

 

2️⃣ 8진법과 10진법 

2진법은 였직 0κ³Ό 1 λ‘κ°œμ˜ 기호만으둜 값을 ν‘œν˜„ν•˜κΈ° λ•Œλ¬Έμ—, 2μ§„λ²•μœΌλ‘œ 값을 ν‘œν˜„ν•˜λ©΄ μžλ¦¬μˆ˜κ°€ μƒλ‹Ήνžˆ κΈΈμ–΄μ§„λ‹€λŠ” 단점이 μžˆλ‹€. 

8μ§„μˆ˜λŠ” 2μ§„μˆ˜ 3자리λ₯Ό, 16μ§„μˆ˜λŠ” 2μ§„μˆ˜ 4자리λ₯Ό 각각 ν•œμžλ¦¬λ‘œ ν‘œν˜„ν•  수 있기 λ•Œλ¬Έμ— μžλ¦¬μˆ˜κ°€ μ§§μ•„μ Έμ„œ μ•Œμ•„λ³΄κΈ° 쉽고 μ„œλ‘œ κ°„μ˜ λ³€ν™˜λ°©λ²• λ˜ν•œ 맀우 κ°„λ‹¨ν•˜λ‹€. 

 

2μ§„μˆ˜λ₯Ό 8μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ €λ©΄ 2μ§„μˆ˜λ₯Ό λ’€μ—μ„œλΆ€ν„° 3μžλ¦¬μ”© λŠμ–΄μ„œ 그에 ν•΄λ‹Ήν•˜λŠ” 8μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ©΄ λœλ‹€. 

2μ§„μˆ˜λ₯Ό 16μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ €λ©΄ 2μ§„μˆ˜λ₯Ό λ’€μ—μ„œλΆ€ν„° 4μžλ¦¬μ”© λŠμ–΄μ„œ 그에 ν•΄λ‹Ήν•˜λŠ” 16μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ©΄ λœλ‹€. 

 

8μ§„μˆ˜ 

000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

 

16μ§„μˆ˜

0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F

 

 

3️⃣ μ •μˆ˜μ˜ 진법 λ³€ν™˜ 

 

10μ§„μˆ˜ -> Nμ§„μˆ˜ λ³€ν™˜ 

10μ§„μˆ˜λ₯Ό λ‹€λ₯Έ μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ €λ©΄ ν•΄λ‹Ή μ§„μˆ˜λ‘œ λ‚˜λˆ„κ³  λ‚˜λ¨Έμ§€ 값을 μ˜†μ— μ λŠ” 것을 더 이상 λ‚˜λˆŒ 수 없을 λ•Œ κΉŒμ§€ λ°˜λ³΅ν•œ λ‹€μŒ λ§ˆμ§€λ§‰ λͺ«κ³Ό λ‚˜λ¨Έμ§€λ₯Ό μ•„λž˜λΆ€ν„° μœ„λ‘œ μˆœμ„œλŒ€λ‘œ 적으면 λœλ‹€. 

 

10μ§„μˆ˜λ₯Ό 8μ§„μˆ˜ λ˜λŠ” 16μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ €λ©΄ 2λŒ€μ‹  8μ΄λ‚˜ 16으둜 λ‚˜λˆ„λ©΄ λœλ‹€. 

-> 즉 Nμ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λ €λ©΄ N으둜 λ°˜λ³΅ν•΄μ„œ λ‚˜λˆ„κΈ°λ§Œ ν•˜λ©΄ λœλ‹€!

 

 

Nμ§„μˆ˜ -> 10μ§„μˆ˜ λ³€ν™˜ 

각 μžλ¦¬μˆ˜μ— ν•΄λ‹Ήν•˜λŠ” λ‹¨μœ„μ˜ 값을 κ³±ν•΄μ„œ λͺ¨λ‘ λ”ν•˜λ©΄ λœλ‹€. 

 

 

4️⃣ μ‹€μˆ˜μ˜ μ§„λ²•λ³€ν™˜ 

 

10진 μ†Œμˆ˜μ μˆ˜λ₯Ό 2진 μ†Œμˆ˜μ μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 방법 

10진 μ†Œμˆ˜μ μˆ˜λ₯Ό 2진 μ†Œμˆ˜μ μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 방법은 10진 μ†Œμˆ˜μ μˆ˜μ— 2λ₯Ό 계속 κ³±ν•œλ‹€.

 

0.625 * 2 = 1.25

0.25 * 2 = 0.5

0.5 * 2 = 1.0 (μ†Œμˆ˜λΆ€κ°€ 0이 λ λ•ŒκΉŒμ§€ 반볡)

 

=> 0.101 (μœ„μ—μ„œ μ•„λž˜ μˆœμ„œ)

 

 

5️⃣ 음수의 2진 ν‘œν˜„ - 2의 λ³΄μˆ˜λ²• 

 

2의 보수 = 1의 보수 + 1 

 

1의 λ³΄μˆ˜λŠ” 0을 1둜, 1을 0으둜 λ°”κΎΈλ©΄ λ˜λ―€λ‘œ 쉽닀. 

2μ§„μˆ˜μ˜ 0101은 1의 λ³΄μˆ˜λŠ” 1010이닀. 여기에 1 λ”ν•˜λ©΄ 2의 λ³΄μˆ˜μ΄λ‹€. 

 

음수의 2진 ν‘œν˜„μ„ κ΅¬ν•˜λŠ” 방법 

1. 음수의 μ ˆλŒ€κ°’μ„ 2μ§„μˆ˜λ‘œ κ΅¬ν•œλ‹€.

2. 1μ—μ„œ κ΅¬ν•œ 2μ§„μˆ˜μ˜ 1을 0으둜 0은 1둜 λ°”κΎΌλ‹€. (1의 보수 κ΅¬ν•˜κΈ°)

3. 2의 결과에 1을 λ”ν•œλ‹€. (2의 보수 κ΅¬ν•˜κΈ°, 1의 보수 + 1)

 

 

6️⃣ κΈ°λ³Έν˜•

 

- λ…Όλ¦¬ν˜• boolean

λ…Όλ¦¬ν˜•μ—λŠ” boolean ν•œκ°€μ§€λ‘œ booleanν˜• λ³€μˆ˜μ—λŠ” true와 false 쀑 ν•˜λ‚˜λ₯Ό μ €μž₯ν•  수 있으며 기본값은 false이닀. 

 

- λ¬Έμžν˜• char 

λ¬Έμžν˜•μ—­μ‹œ char ν•œκ°€μ§€ μžλ£Œν˜•λ°–μ— μ—†λ‹€. 문자λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•˜λ©°, char νƒ€μž…μ˜ λ³€μˆ˜λŠ” 단 ν•˜λ‚˜μ˜ λ¬Έμžλ§Œμ„ μ €μž₯ν•  수 μžˆλ‹€. 

 

char ch = 'A';

 

μœ„μ—λŠ” λ³€μˆ˜μ— λ¬Έμžκ°€ μ €μž₯λœκ²ƒ κ°™μ§€λ§Œ μ‹€μ œλ‘œλŠ” λ¬Έμžκ°€ μ•„λ‹Œ μœ λ‹ˆμ½”λ“œκ°€ μ €μž₯λœλ‹€. 

μ™œλƒν•˜λ©΄ μ»΄ν“¨ν„°λŠ” μˆ«μžλ°–μ— λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— λͺ¨λ“  데이터λ₯Ό 숫자둜 λ³€ν™˜ν•˜μ—¬ μ €μž₯ν•˜λŠ” 것이닀. 

 

char ch = 'A'; 와 char ch = 65; λŠ” λ™μΌν•œ κ²°κ³Όλ₯Ό μ–»λŠ”λ‹€. 

 

 

- μ •μˆ˜ν˜• byte, short, int, lonng

byte(1) -> short(2) -> int(4) -> long(8) 

κΈ°λ³Έ μžλ£Œν˜•μ€ int이닀. 

μ •μˆ˜ν˜• λ³€μˆ˜λ₯Ό μ„ μ–Έν• λ•ŒλŠ” int νƒ€μž…μœΌλ‘œ ν•˜κ³ , int의 λ²”μœ„λ₯Ό λ„˜μ–΄μ„œλŠ” 수λ₯Ό 닀뀄야할 λ•ŒλŠ” long을 μ‚¬μš©ν•˜λ©΄ λœλ‹€. 

 

μ—°μ‚° κ³Όμ •μ—μ„œ ν•΄λ‹Ή νƒ€μž…μ΄ ν‘œν˜„ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λ₯Ό λ„˜μ–΄μ„œλŠ” 것을 μ˜€λ²„ν”Œλ‘œμš°λΌκ³  ν•œλ‹€. 

μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν–ˆλ‹€κ³  ν•΄μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” 것은 μ•„λ‹ˆκ³ , μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 얻지 λͺ»ν•  뿐이닀. 

 

 

- μ‹€μˆ˜ν˜• float, double

μ‹€μˆ˜ν˜•μ€ μ •μˆ˜ν˜•κ³Ό 달리 μ˜€μ°¨κ°€ λ°œμƒν•  수 μžˆλ‹€λŠ” 단점이 μžˆλ‹€. 

κ·Έλž˜μ„œ μ‹€μˆ˜ν˜•μ—λŠ” ν‘œν˜„ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„λΏλ§Œ μ•„λ‹ˆλΌ 정밀도도 μ€‘μš”ν•œ μš”μ†Œμ΄λ‹€. 

만일 7자리 μ΄μƒμ˜ 정밀도가 ν•„μš”ν•˜λ‹€λ©΄, λ³€μˆ˜μ˜ νƒ€μž…μ„ double둜 ν•΄μ•Όν•œλ‹€. 

 

μ‹€μˆ˜ν˜• 값을 μ €μž₯ν•  λ•Œ, float νƒ€μž…μ΄ μ•„λ‹Œ doubleνƒ€μž…μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” λŒ€λΆ€λΆ„ μ €μž₯ν•˜λ €λŠ” κ°’μ˜ λ²”μœ„κ°€ μ•„λ‹ˆλΌ 높은 정밀도가 ν•„μš”ν•΄μ„œμ΄λ‹€. 

 

 

 

7️⃣ 인코딩과 λ””μ½”λ”© 

문자λ₯Ό μ½”λ“œλ‘œ λ³€ν™˜ν•˜λŠ” 것을 문자 인코딩, κ·Έ λ°˜λŒ€λ‘œ μ½”λ“œλ₯Ό 문자둜 λ³€ν™˜ν•˜λŠ” 것을 문자 디코딩이라고 ν•œλ‹€. 

문자λ₯Ό μ €μž₯ν•  λ•ŒλŠ” 인코딩을 ν•΄μ„œ 숫자둜 λ³€ν™˜ν•΄μ„œ μ €μž₯ν•˜κ³ , μ €μž₯된 문자λ₯Ό μ½μ–΄μ˜¬ λ•ŒλŠ” 디코딩을 ν•΄μ„œ 숫자λ₯Ό μ›λž˜μ˜ 문자둜 λ˜λŒλ €μ•Όν•œλ‹€. 

 

 

8️⃣ ν˜•λ³€ν™˜ 

ν˜•λ³€ν™˜castingμ΄λž€?

λ³€μˆ˜λ‚˜ λ¦¬ν„°λŸ΄μ˜ νƒ€μž…μ„ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것을 ν˜•λ³€ν™˜μ΄λΌκ³  ν•œλ‹€. 

 

ν˜•λ³€ν™˜ν•˜λŠ” 방법은 κ·Έλƒ₯ ν˜•λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” λ³€μˆ˜λ‚˜ λ¦¬ν„°λŸ΄ μ•žμ— λ³€ν™˜ν•˜κ³ μž ν•˜λŠ” νƒ€μž…μ„ κ΄„ν˜Έμ™€ ν•¨κ»˜ λΆ™μ—¬μ£ΌκΈ°λ§Œ ν•˜λ©΄ λœλ‹€. 

 

(νƒ€μž…) ν”Όμ—°μ‚°μž

-> 여기에 μ‚¬μš©λ˜λŠ” κ΄„ν˜ΈλŠ” '캐슀트 μ—°μ‚°μž' ν˜Ήμ€ 'ν˜•λ³€ν™˜ μ—°μ‚°μž'라고 ν•˜λ©°, ν˜•λ³€ν™˜μ„ μΊμŠ€νŒ…μ΄λΌκ³  ν•œλ‹€. 

-> ν˜•λ³€ν™˜μ„ ν–ˆλ‹€κ³  ν•΄μ„œ ν”Όμ—°μ‚°μžμ—λŠ” μ•„λ¬΄λŸ° λ³€ν™”κ°€ μ—†λ‹€!!!

 

μ •μˆ˜κ°„μ˜ ν˜•λ³€ν™˜

큰 νƒ€μž…μ—μ„œ μž‘μ€νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λ©΄ κ°’ 손싀이 λ°œμƒν•  수 μžˆλ‹€.

λ°˜λŒ€λ‘œ μž‘μ€ νƒ€μž…μ—μ„œ 큰 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λ©΄ κ°’ 손싀이 λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€. 

 

μ‹€μˆ˜ν˜• -> μ •μˆ˜ν˜• λ³€ν™˜

μ‹€μˆ˜ν˜•μ„ μ •μˆ˜ν˜•μœΌλ‘œ λ³€ν™˜ν•˜λ©΄ μ‹€μˆ˜ν˜•μ˜ μ†Œμˆ˜μ μ΄ν•˜ 값은 버렀진닀. 

μ™œλƒν•˜λ©΄ μ •μˆ˜ν˜•μ˜ ν‘œν˜„μ‹μœΌλ‘œλŠ” μ†Œμˆ˜μ  μ΄ν•˜μ˜ 값은 ν‘œν˜„ν•  수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€!

 

 

9️⃣ μžλ™ ν˜•λ³€ν™˜

μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…κ°„μ˜ λŒ€μž…μ΄λ‚˜ 연산을 ν•  λ•Œ, ν˜•λ³€ν™˜μœΌλ‘œ νƒ€μž…μ„ μΌμΉ˜μ‹œν‚€λŠ” 것이 원칙인데, κ²½μš°μ— λ”°λΌμ„œ νŽΈμ˜μƒμ˜ 이유둜 ν˜•λ³€ν™˜μ„ μƒλž΅ν•  수 μžˆλ‹€.

μƒλž΅ν•œλ‹€κ³  ν•΄μ„œ ν˜•λ³€ν™˜μ΄ 이뀄지지 μ•ŠλŠ” 것은 μ•„λ‹ˆκ³ , μ»΄νŒŒμΌλŸ¬κ°€ μƒλž΅λœ ν˜•λ³€ν™˜μ„ μžλ™μ μœΌλ‘œ μΆ”κ°€ν•œλ‹€. 

 

μ„œλ‘œ λ‹€λ₯Έ 두 νƒ€μž…κ°„μ˜ λ§μ…ˆμ—μ„œλŠ” 두 νƒ€μž… 쀑 ν‘œν˜„λ²”μœ„κ°€ 더 넓은 νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜ν•˜μ—¬ νƒ€μž…μ„ μΌμΉ˜μ‹œν‚¨ λ‹€μŒμ— 연산을 μˆ˜ν–‰ν•œλ‹€. 

μ΄λ ‡κ²Œ ν•˜λŠ” 것이 κ°’ μ†μ‹€μ˜ μœ„ν—˜μ΄ 더 μ μ–΄μ„œ μ˜¬λ°”λ₯Έ κ²°κ³Όλ₯Ό 얻을 ν™•λ₯ μ΄ λ†’λ‹€.

 

μžλ™ ν˜•λ³€ν™˜ κ·œμΉ™ 

ν˜•λ³€ν™˜μ„ ν•˜λŠ” μ΄μœ λŠ” 주둜 μ„œλ‘œ λ‹€λ₯Έ 두 νƒ€μž…μ„ μΌμΉ˜μ‹œν‚€κΈ° μœ„ν•΄μ„œμΈλ°, ν˜•λ³€ν™˜μ„ μƒλž΅ν•˜λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ•Œμ•„μ„œ μžλ™μ μœΌλ‘œ ν˜•λ³€ν™˜μ„ ν•œλ‹€κ³  ν–ˆλ‹€. 

μ»΄νŒŒμΌλŸ¬κ°€ ν˜•λ³€ν™˜ν•˜λŠ” κ·œμΉ™μ€ 기쑴의 값을 μ΅œλŒ€ν•œ 보쑴할 수 μžˆλŠ” νƒ€μž…μœΌλ‘œ μžλ™ ν˜•λ³€ν™˜ν•œλ‹€!

 

κΈ°λ³Έν˜•μ˜ μžλ™ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•œ λ°©ν–₯

byte -> short -> int -> long -> float -> double 
           char 

 

μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œμ˜ λ³€ν™˜μ€ ν˜•λ³€ν™˜ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ μžλ™ ν˜•λ³€ν™˜λ˜λ©°, κ·Έ λ°˜λŒ€ λ°©ν–₯으둜의 λ³€ν™˜μ€ λ°˜λ“œμ‹œ ν˜•λ³€ν™˜ μ—°μ‚°μžλ₯Ό μ¨μ€˜μ•Όν•œλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

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

[JAVA] 7. 반볡문  (0) 2022.04.06
[JAVA] 6. 쑰건문  (0) 2022.04.05
[JAVA] 4. μ—°μ‚°μžoperator  (0) 2022.04.04
[JAVA] 2. λ³€μˆ˜ (Variable)  (0) 2022.03.31
[JAVA] 1. μžλ°”  (0) 2022.03.30