+0과 -0 알아보기
수학적으로 0은 음수와 양수의 사이에 차이가 없기 때문에 같은 값으로 봅니다.
하지만 컴퓨터 세계에서는 +0
과 -0
은 엄밀히 말하면 다릅니다.

javascript 콘솔에서 -0
을 입력하면 -0
을 반환합니다.
즉, +0
과 구분되는 -0
이 존재한다는 것이죠.

+0
과 1
을 곱하거나 나누었을 때는 +0
을 반환합니다.
반면 -0
과 1
을 곱하거나 나누었을 때 -0
을 반환해요.

+0
과 -0
을 비교해 보면 true
를 반환합니다.
그렇다면 +0
과 -0
은 왜 구분되어 있을까요?
+0과 -0를 구분하는 이유
우리가 실생활에서 사용하는 숫자 표기법은 0부터 9까지 사용하는 십진법입니다.
컴퓨터가 사용하는 숫자 표기법은 0과 1을 사용하는 이진법입니다.
우리가 컴퓨터에게 십진수를 입력했을 때, 컴퓨터는 이진수로 변환하여 값을 인식해요.
컴퓨터는 1
, 2
, 3
과 같은 정수 뿐만 아니라 0.1
, 0.4
와 같은 소수점도 이해할 수 있어야 하기 때문에
이진수로 소수를 표현할 수 있는 부동소수점의 형태로 저장하고 있어요.
컴퓨터에서 부동소수점을 저장할 때 컴퓨터 천재들이 정한 IEEE754표준에 따라서 처리하고,
javascript 또한 IEEE754표준을 따릅니다. [ECMA 링크]
(정확히 말하면 전기전자공학자협회에서 만든 표준인데, 협회에 계신 분들은 모두 컴퓨터 천재일테니 틀린 말은 아니죠?ㅎ)
잠깐 정리하고 넘어가기!
- 사람이 십진수를 입력했을 때, 컴퓨터는 부동소수점으로 변환하여 처리한다.
- 부동소수점란? 이진수로 소수점을 표현할 수 있는 형태이다.
- 컴퓨터에서 부동소수점을 처리할 때 IEEE754표준을 따라 처리한다.
이 글의 제목이 쉽게 이해하기이기 때문에
십진수을 어떻게 부동소수점으로 변환하는지는 다루지 않을 거예요.
(우리에겐 변환하는 방식이 중요한 게 아니니까요!)

설명을 위해 컴퓨터에서 부동소수점이 어떤 모습으로 저장되는지 이미지를 가져와봤어요.
구조에 대해 자세히 알 필요는 없고, 중요한 것은 가장 앞에 있는 sign 비트입니다.
sign 비트는 값이 음수인지 양수인지 저장하는 역할을 합니다.
양수라면 0을 저장하고 음수라면 1을 저장해요.
+0
을 입력했을 때는 sign 비트가 0
이 될 것이고,
-0
을 입력했을 때는 sign 비트가 1
이 되겠죠!
이 차이로 인해 +0
과 -0
이 구분되는 것입니다.
사실 +0
과 -0
을 구분하는 이유라는 건 없지만,
javascript가 부동소수점으로 변환하여 숫자를 저장하다 보니 +0
과 -0
이 구분된 것 입니다!
+0과 -0의 차이
+0
과 -0
은 같은 값이지만, 차이도 분명 존재합니다.

1
을 0
으로 나눌 수 없기 때문에 그 값은 무한이 됩니다.
이때 +0
으로 나누었을 땐 양수무한, -0
으로 나누었을 땐 음수무한이 됩니다.
분명 같은 값을 가졌지만, 분모가 되었을 땐 무한의 차이가 발생해요.

javascript에서 가장 엄격한 비교를 수행하는 Object.is()
를 사용하여
+0
과 -0
을 비교하면 false
를 반환합니다.
+0과 -0 차이 정리
- javascript는 IEEE754 표준에 따라 십진수를 부동소수점으로 변환하여 숫자를 저장한다.
- 변환된 부동소수점의 첫 번째 비트는 부호를 저장한다.
+0
을 입력하면 맨 앞 비트는0
이 되고,-0
을 입력하면 맨 앞 비트는1
이 된다.+0
과 -0은 일치 비교(===)하면true
를 반환한다.+0
과-0
을Object.is()
로 비교하면false
를 반환한다.
0.1 + 0.2 은 0.3이 아니다

0.1 + 0.2
과 0.3
을 비교하면 false
를 반환합니다.(???)
0.1 + 0.2
의 값을 찍어보니 0.30000000000000004
를 반환하는군요.
이 또한 숫자를 IEEE754표준에 따라 저장하면서 발생하는 현상입니다.
궁금하신 분들은 추천글을 확인해주세요!
추천글
[Javascript] 0.1 + 0.2가 0.3이 아닌 이유 쉽게 이해하기
지난 글 복습하기지난 포스팅에서 javascript에서 `-0`이 존재하는 이유에 대해 알아보았어요.[양수 0, 음수 0 차이 쉽게 이해하기] 위의 글에서 이야기했던 `-0`이 존재하는 이유와 오늘 글의 주제와
shelly-log.tistory.com
'개발 > Javascript' 카테고리의 다른 글
[Javascript] NaN 알아보기 (0) | 2024.07.02 |
---|---|
[Javascript] 0.1 + 0.2가 0.3이 아닌 이유 쉽게 이해하기 (0) | 2024.06.23 |
[Javascript] 스크롤 이벤트로 비디오 재생 | 클론코딩 | 인터렉티브 웹 (0) | 2023.11.06 |
[Javascript] Hash 란? (0) | 2022.09.26 |
[토스페이먼츠 / Javascript] 자동 결제 연동하기 - SDK 결제창 이용 (0) | 2022.08.16 |