πŸ‘©‍πŸ’» C

C μ–Έμ–΄ - μ •μˆ˜, μ‹€μˆ˜μ˜ μ˜€λ²„ν”Œλ‘œμš°, μ–Έλ”ν”Œλ‘œμš° (overflow , underflow)

Newmon 2020. 10. 17. 18:56

 

*μ˜€λ²„ν”Œλ‘œμš° (overflow) : λ©”λͺ¨λ¦¬μ— ν‘œν˜„ λ²”μœ„λ₯Ό μ΄ˆκ³Όν•˜λŠ” 수의 값을 μ €μž₯ν• λ•Œ λ°œμƒ

*μ–Έλ”ν”Œλ‘œμš° (underflow) : λ©”λͺ¨λ¦¬κ°€ ν‘œν˜„ λ²”μœ„λ³΄λ‹€ μž‘μ€ 수의 값을 μ €μž₯ν• λ•Œ λ°œμƒ

즉, μ•„λž˜ 사진(ν‘œ)의 λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ 값을 μ €μž₯ν•˜λ©΄ μ˜€λ²„ν”Œλ‘œμš° 및 μ–Έλ”ν”Œλ‘œμš°κ°€ λ°œμƒν•œλ‹€.

 

*데이터 νƒ€μž…λ³„ ν‘œν˜„ λ²”μœ„ 

 

λ‘λ²ˆμ§Έ 쀄에 μžˆλŠ” unsigned char에 λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ 값인 256을 넣어보면

#include <stdio.h>

int main(void){
    unsigned char a = 256;
    printf("%d", a);
}

좜λ ₯>>>>>>>> 0

0이 좜λ ₯λœλ‹€.

 

μ–Έλ”ν”Œλ‘œμš°μΌ 경우, μ‹œκ³„ λ°˜λŒ€λ°©ν–₯으둜 μˆ«μžκ°€ λ²—μ–΄λ‚œλ§ŒνΌ μ΄λ™ν•˜κ²Œ 되고,

μ˜€λ²„ν”Œλ‘œμš°μΌ 경우, μ‹œκ³„λ°©ν–₯으둜 μˆ«μžκ°€ λ²—μ–΄λ‚œλ§ŒνΌ μ΄λ™λ˜μ–΄ ν‘œν˜„λœλ‹€. 

즉, 256은 1만큼 μ˜€λ²„ν”Œλ‘œμš° λœκ²ƒμ΄λ―€λ‘œ, μ‹œκ³„λ°©ν–₯으둜 ν•œμΉΈ μ΄λ™ν•˜μ—¬ 0이 λœκ²ƒμ΄λ‹€.

 

 

*μ‹€μˆ˜μΈ κ²½μš°μ—λŠ” μ˜€λ²„ν”Œλ‘œμš°κ°€ μΌμ–΄λ‚˜λ©΄ +inf(infinity) ν˜Ήμ€ -inf둜 좜λ ₯되고, μ–Έλ”ν”Œλ‘œμš°κ°€ μΌμ–΄λ‚˜λ©΄ 0 λ˜λŠ” μ“°λ ˆκΈ°κ°’μœΌλ‘œ 좜λ ₯λœλ‹€.

 

 

 

*μ˜€λ²„ν”Œλ‘œμš°λ‘œ 인해 λ¬Έμ œκ°€ 된 사둀

newspeppermint.com/2014/12/16/binary-bug/

 

κ°•λ‚¨μŠ€νƒ€μΌμ€ μ–΄λ–»κ²Œ 유튜브 쑰회수 μΈ‘μ • μ„œλ²„μ— 문제λ₯Ό μΌμœΌμΌ°λ‚˜

μ‹Έμ΄μ˜ ‘κ°•λ‚¨μŠ€νƒ€μΌ’ μΈκΈ°λŠ” 상상을 μ΄ˆμ›”ν•©λ‹ˆλ‹€. 적어도 유튜브 μ½”λ“œμ— μ˜ν•˜λ©΄ ν™•μ‹€νžˆ 그랬죠. 유튜브 μ‘°νšŒμˆ˜κ°€ 2,147,483,647 (21μ–΅) 을 λ„˜μ–΄κ°€λ©΄μ„œ 쑰회수λ₯Ό 64λΉ„νŠΈ 숫자둜 λ°”κΎΈμ–΄ 9,223,372,036,854,7

newspeppermint.com