메뉴 닫기

파이썬 숫자 리터럴 완전정복 2진수 8진수 16진수 자릿수 구분자 복소수 지수표기까지 한 번에

파이썬 숫자 리터럴 완전정복 2진수 8진수 16진수 자릿수 구분자 복소수 지수표기까지 한 번에

🧠 기초 문법으로 계산 실수를 줄이고 더 읽기 쉬운 코드를 만드는 법을 핵심 예제로 소개합니다

숫자를 다루는 코드는 사소한 표기 차이만으로도 가독성과 안정성이 크게 달라집니다.
파이썬은 2진수와 8진수 16진수 같은 다양한 진법 표기부터 자릿수 구분자 언더스코어 복소수 리터럴 그리고 지수표기까지 폭넓은 문법을 제공합니다.
처음 접할 때는 0b 0o 0x 같은 접두사나 1+2j 같은 형식이 낯설 수 있지만 실제로는 몇 가지 규칙만 알면 손쉽게 활용할 수 있습니다.
이 글은 실무와 학습에서 바로 써먹을 수 있도록 문법의 핵심과 주의점을 쉽고 간단한 예제 중심으로 정리합니다.
한 번 익혀 두면 디버깅 시간이 줄고 코드 리뷰에서도 설명이 훨씬 수월해집니다.

특히 큰 숫자를 다룰 때 자릿수 구분자를 적절히 쓰면 오타를 줄일 수 있고 하드웨어 레벨 처리나 비트 연산에는 2진수 16진수 표기가 강력합니다.
복소수는 과학 계산과 신호 처리에서 필수이고 지수표기는 작은 값과 큰 값을 간결하게 표현하는 데 유용합니다.
각 항목마다 동작 원리와 가능한 형태를 정확히 짚어 보고 흔히 하는 실수도 함께 체크합니다.
필요한 부분만 골라 읽어도 이해가 연결되도록 구성했으니 자신의 사용 환경에 맞춰 바로 적용해 보세요.



📌 파이썬 숫자 리터럴 한눈에 보기

파이썬에서는 숫자를 표현하는 방법만 제대로 알아도 코드의 가독성과 안정성이 크게 올라갑니다.
정수 하나를 쓰더라도 진법 접두사로 비트 단위를 명확히 밝힐 수 있고, 긴 숫자에는 언더스코어 자릿수 구분자를 써서 사람 눈에 읽기 좋게 만들 수 있죠.
또한 수학과 과학 계산에서 빈번히 쓰는 복소수 리터럴과, 아주 크거나 작은 실수를 간결하게 표기하는 지수표기도 기본으로 지원합니다.
아래 정리 표와 예제에서 핵심 규칙을 한번에 훑고, 각 항목의 의미를 감으로만이 아니라 문법적으로 정확하게 이해해 보세요.

핵심 포인트는 네 가지입니다.
첫째, 2진수 8진수 16진수는 각각 0b, 0o, 0x 접두사로 시작합니다.
둘째, 긴 숫자는 언더스코어(_) 자릿수 구분자를 자유롭게 섞어 쓸 수 있지만 숫자의 맨 앞이나 맨 뒤, 소수점 바로 앞뒤에는 붙일 수 없습니다.
셋째, 복소수는 실수부+허수부j 형식(예: 1+2j)으로 표기합니다.
넷째, 지수표기는 e 또는 E 뒤에 10의 지수를 적는 방식(예: 1.2e-3)입니다.
이 네 가지는 시험 문제처럼 따로 떨어진 지식이 아니라, 실무 코드에서 숫자를 더 정확하게 기록하는 기본 문법입니다.

종류 표기 예시
2진수 0b1010, 0b_1111_0000
8진수 0o17, 0o_755
16진수 0xFF, 0x_dead_beef
자릿수 구분자 1_000_000, 3.1415_9265
복소수 1+2j, -3.5j, 0+1j
지수표기 1.2e-3, 6.022e23, 1e0
CODE BLOCK
# 진법 접두사
a = 0b1010       # 10
b = 0o17         # 15
c = 0xFF         # 255

# 자릿수 구분자(_)
big = 1_000_000  # 1000000
pi  = 3.1415_9265

# 복소수 (허수단위 j)
z1 = 1 + 2j
z2 = -3.5j
mag = abs(z1)    # 크기

# 지수표기 (부동소수점)
tiny = 1.2e-3    # 0.0012
avogadro = 6.022e23

💎 핵심 포인트:
정수 리터럴은 크기에 제한이 없고 오버플로를 걱정하지 않아도 됩니다.
자릿수 구분자는 숫자의 값에 영향을 주지 않으며, 파이썬이 자동으로 무시합니다.
복소수의 허수단위는 항상 j이고, i가 아닙니다.
지수표기는 10의 거듭제곱을 의미하며, 1.2e-3 = 0.0012와 같습니다.

💡 TIP: 숫자를 로깅하거나 출력할 때는 format()이나 f-string의 포맷 지정자를 활용하면 가독성이 좋아집니다.
예를 들어 16진수는 f”{255:#x}”처럼 #을 붙여 접두사까지 포함해 표시할 수 있습니다.

⚠️ 주의: 언더스코어 구분자는 숫자 맨 앞이나 맨 뒤, 소수점(.) 바로 앞뒤, 지수 기호(e/E) 바로 앞뒤, 접두사(0b/0o/0x) 바로 뒤에는 놓을 수 없습니다.
예: _100, 100_, 1_.0, 1._0, 1e_3, 0x_FF는 문법 오류입니다.

📌 2진수 8진수 16진수 표기 0b 0o 0x

파이썬은 숫자를 다양한 진법으로 표현할 수 있도록 기본적으로 세 가지 접두사를 제공합니다.
이 기능은 하드웨어 제어나 비트 단위 연산에서 매우 유용하며, 데이터 처리나 시스템 프로그래밍에서 자주 쓰입니다.
기본적으로 파이썬은 모든 정수를 10진수로 처리하지만, 코드를 작성할 때 2진수(0b), 8진수(0o), 16진수(0x) 형태로 명시해두면 숫자의 의미를 한눈에 파악할 수 있습니다.

각 진법은 내부적으로 같은 정수 값을 가지지만 표현 방식만 다릅니다.
예를 들어 0b1010, 0o12, 0xA, 10은 모두 동일한 숫자 값을 나타냅니다.
이 점을 이해해 두면 디버깅 중 출력 결과가 다른 진법으로 보여도 혼동하지 않게 됩니다.

CODE BLOCK
# 10진수 값 10을 다양한 진법으로 표현
a = 10        # 10진수
b = 0b1010    # 2진수
c = 0o12      # 8진수
d = 0xA       # 16진수

print(a == b == c == d)  # True
print(bin(a), oct(a), hex(a))
# 출력: 0b1010 0o12 0xa

표준 변환 함수인 bin(), oct(), hex()를 사용하면 정수를 각각 2진수 8진수 16진수 문자열로 변환할 수 있습니다.
이 함수들은 접두사(0b, 0o, 0x)를 포함한 문자열을 반환하므로, 출력 시 어떤 진법인지 명확하게 구분됩니다.

🧩 진법 변환 시 주의점

진법 변환은 단순히 표기 형식이 달라질 뿐 내부 값은 같지만, 문자열로 처리할 때는 반드시 정수형으로 다시 변환해야 합니다.
예를 들어 사용자 입력을 받아 처리할 때 int() 함수에 두 번째 인자로 진법을 명시하면 손쉽게 변환할 수 있습니다.

CODE BLOCK
# 문자열을 정수로 변환할 때 진법 지정 가능
n1 = int('1010', 2)   # 2진수 → 10진수 (10)
n2 = int('12', 8)     # 8진수 → 10진수 (10)
n3 = int('A', 16)     # 16진수 → 10진수 (10)

print(n1, n2, n3)

💎 핵심 포인트:
파이썬은 정수를 저장할 때 자동으로 크기를 확장하므로, 32비트나 64비트 범위를 넘는 오버플로 걱정이 없습니다.
하지만 비트 연산에서는 상위 비트가 늘어날 수 있으므로 &, |, ^ 연산의 결과 범위를 주의하세요.

⚠️ 주의: 접두사는 반드시 소문자여야 하며, 0B, 0O, 0X처럼 대문자로 표기하면 문법 오류가 발생합니다.



📌 자릿수 구분자 언더스코어 사용법 _

큰 숫자를 읽을 때 ‘0’이 몇 개인지 헷갈린 경험, 누구나 한 번쯤 있을 겁니다.
파이썬은 이런 실수를 줄이기 위해 자릿수 구분자(_)를 숫자 중간에 사용할 수 있도록 허용합니다.
이 문법은 실제 값에는 전혀 영향을 주지 않고, 단지 코드 가독성을 높이는 역할만 합니다.
즉, 1_000_0001000000은 완전히 동일한 숫자입니다.

이 기능은 파이썬 3.6부터 정식으로 도입되었으며, 정수뿐만 아니라 실수, 복소수, 진법 리터럴(2진수 8진수 16진수)에서도 사용할 수 있습니다.
특히 금융 계산이나 하드웨어 주소를 다룰 때, 코드를 더 깔끔하게 유지하는 데 큰 도움이 됩니다.

CODE BLOCK
# 자릿수 구분자 예제
million = 1_000_000
pi = 3.1415_9265
binary = 0b_1111_0000
hex_value = 0x_dead_beef

print(million)     # 1000000
print(pi)          # 3.14159265
print(binary)      # 240
print(hex_value)   # 3735928559

위 예제처럼 숫자 중간의 _는 단순히 시각적 구분만 제공하며, 연산이나 비교 시에는 자동으로 제거되어 처리됩니다.
따라서 데이터 입력 과정에서 쉼표(,) 대신 언더스코어를 사용하는 것이 가장 안전하고 권장되는 방식입니다.

💡 올바른 사용 위치와 규칙

언더스코어는 숫자 중간 어디에든 들어갈 수 있지만, 아래와 같은 위치에서는 사용할 수 없습니다.

  • 🚫숫자의 맨 앞이나 맨 끝
  • 🚫소수점(.) 바로 앞뒤
  • 🚫지수 표기(e/E) 바로 앞뒤
  • 🚫접두사(0b, 0o, 0x) 바로 뒤
CODE BLOCK
# 올바르지 않은 예시 (SyntaxError)
# _100
# 100_
# 1_.0
# 1._0
# 1e_3
# 0x_FF

💎 핵심 포인트:
언더스코어는 단순한 ‘가독성 도우미’입니다.
파이썬이 숫자를 내부에서 해석할 때는 완전히 제거된 상태로 처리하므로, 연산 결과에는 아무런 영향을 미치지 않습니다.

💡 TIP: 큰 금액이나 데이터 크기(예: 1_024_000)처럼 구분 단위가 명확한 값에는 언더스코어를 일관되게 사용하는 습관을 들이면 코드 유지보수가 훨씬 편해집니다.

📌 복소수 리터럴 1+2j와 연산 기본

복소수는 실수부와 허수부로 구성된 수로, 파이썬에서는 과학 계산·물리 시뮬레이션·신호 처리 분야에서 자주 사용됩니다.
특이하게도 파이썬은 복소수를 별도 라이브러리 없이 기본 내장 타입으로 제공합니다.
표현 방식은 간단합니다. 1+2j처럼 j를 허수 단위로 사용합니다.
여기서 j는 수학에서의 i와 같은 의미이며, 대문자 J도 허용됩니다.

복소수 리터럴은 실수부와 허수부가 모두 부동소수점 형태로 지정될 수 있고, complex() 함수를 사용해 동적으로 생성할 수도 있습니다.
다음 예제는 복소수 선언과 기본 연산을 보여줍니다.

CODE BLOCK
# 복소수 리터럴 예제
z1 = 1 + 2j
z2 = 3 - 4j

print(z1 + z2)   # (4-2j)
print(z1 * z2)   # (11+2j)

# 실수부와 허수부 접근
print(z1.real)   # 1.0
print(z1.imag)   # 2.0

# 켤레복소수
print(z1.conjugate())  # (1-2j)

# 크기(절댓값)
print(abs(z1))   # 2.23606797749979

복소수는 일반적인 사칙연산뿐 아니라, 내장 수학 함수와도 함께 사용할 수 있습니다.
예를 들어 cmath 모듈을 이용하면 제곱근, 삼각함수 등 복소 영역의 연산을 지원합니다.

⚙️ 복소수 관련 표준 모듈 활용

복소수 전용 연산에는 cmath 모듈이 적합합니다.
이 모듈은 math와 거의 동일한 인터페이스를 제공하지만, 복소 입력을 허용하며 복소 결과를 반환합니다.

CODE BLOCK
import cmath

z = 1 + 2j

print(cmath.sqrt(z))    # 제곱근
print(cmath.phase(z))   # 위상각
print(cmath.polar(z))   # 극좌표 변환

💎 핵심 포인트:
복소수는 파이썬의 기본 내장 타입이며, 별도의 클래스 정의 없이 바로 연산이 가능합니다.
실수부(.real)와 허수부(.imag) 속성으로 구성되어 있고, 복소수 계산 시 오차 없이 정확히 처리됩니다.

⚠️ 주의: 복소수 리터럴에서 j 앞뒤에는 반드시 숫자가 와야 합니다.
예를 들어 +j-j 같은 표기는 허용되지 않으며, 1j 또는 -1j처럼 써야 올바릅니다.



📌 지수표기 1.2e-3과 부동소수점 팁

지수표기법은 아주 크거나 아주 작은 실수를 간결하게 표현할 때 유용한 표기입니다.
예를 들어 0.0012를 1.2e-3으로, 3,000,000을 3e6으로 나타낼 수 있습니다.
이 표기에서 e 또는 E는 10의 거듭제곱을 의미하며, 뒤의 숫자는 지수를 뜻합니다.
즉, 1.2e-31.2 × 10⁻³과 같은 의미입니다.

파이썬에서는 실수 리터럴을 입력할 때 이러한 지수 표기를 자유롭게 사용할 수 있으며, 자동으로 부동소수점으로 인식합니다.
이는 과학 데이터, 측정 단위, 또는 물리 상수 같은 값을 다룰 때 특히 유용합니다.

CODE BLOCK
# 지수표기 예시
a = 1.2e-3
b = 3e6
c = 5.67E-8

print(a)  # 0.0012
print(b)  # 3000000.0
print(c)  # 5.67e-08

지수부가 0인 경우, 1e0은 단순히 1.0으로 해석됩니다.
또한 부호는 + 또는 로 지정할 수 있으며, 대문자 E를 사용해도 결과는 같습니다.

🧮 부동소수점 오차와 표현 한계

지수표기 수는 부동소수점(floating-point)으로 저장되므로, 2진수 기반의 표현 한계로 인해 미세한 오차가 발생할 수 있습니다.
이는 파이썬뿐 아니라 대부분의 프로그래밍 언어에서 공통적으로 나타나는 현상입니다.

CODE BLOCK
# 부동소수점 오차 예시
x = 0.1 + 0.2
print(x)          # 0.30000000000000004
print(x == 0.3)   # False

이런 오차는 부정확한 계산이 아니라, 내부 표현의 한계 때문입니다.
정확한 비교가 필요한 경우에는 math.isclose() 함수를 사용하거나, Decimal 모듈로 고정소수점 연산을 수행하는 것이 좋습니다.

CODE BLOCK
import math
from decimal import Decimal

# 방법 1: math.isclose 사용
print(math.isclose(0.1 + 0.2, 0.3))  # True

# 방법 2: Decimal로 정밀 계산
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b == Decimal('0.3'))       # True

💎 핵심 포인트:
지수표기법은 큰 수나 작은 수를 효율적으로 표현할 수 있지만, 부동소수점 오차에 주의해야 합니다.
정확도가 중요한 경우 Decimal 또는 fractions 모듈로 처리하는 것이 더 안전합니다.

⚠️ 주의: 지수부 앞뒤에는 언더스코어(_)를 사용할 수 없습니다.
예를 들어 1e_3은 문법 오류이며, 올바른 표기는 1e3입니다.

자주 묻는 질문 (FAQ)

언더스코어를 여러 개 연속으로 써도 되나요?
가능합니다. 1__000__000처럼 연속으로 사용해도 숫자 값은 동일합니다. 다만 가독성이 떨어질 수 있으므로 한 자리마다 한 개씩 사용하는 것이 좋습니다.
복소수의 허수부에만 숫자를 지정할 수 있나요?
네. 허수부만 지정하고 실수부를 0으로 둘 수 있습니다. 예를 들어 2j, -5j는 각각 (0+2j), (0-5j)와 같습니다.
지수표기에서 e 대신 E를 써도 되나요?
가능합니다. 1.2E-3과 1.2e-3은 동일한 값으로 처리됩니다. 대문자와 소문자 구분은 하지 않습니다.
16진수에서 소문자와 대문자 표기 중 어느 것이 맞나요?
모두 허용됩니다. 0xFF와 0xff는 같은 값을 가지며, 표준 출력 시에는 보통 소문자로 표시됩니다.
복소수끼리 나눗셈도 가능한가요?
네. 복소수는 사칙연산이 모두 가능합니다. 예를 들어 (1+2j)/(3+4j)는 자동으로 수학적 계산을 수행하여 복소 결과를 반환합니다.
정수 리터럴에 0으로 시작해도 되나요?
불가능합니다. 0으로 시작하는 정수는 파이썬 3에서 문법 오류입니다. 진법을 표현할 때만 0b, 0o, 0x와 함께 사용할 수 있습니다.
복소수의 실수부가 소수일 때도 가능할까요?
네. 예를 들어 3.5+2.1j처럼 실수부와 허수부 모두 부동소수점으로 지정할 수 있습니다. 계산 또한 자동으로 복소 형태로 유지됩니다.
0b, 0o, 0x 표기를 출력할 때 유지하려면 어떻게 하나요?
format() 함수나 f-string에서 # 옵션을 사용하면 접두사를 유지한 채 출력됩니다. 예를 들어 f”{255:#x}” → 0xff 가 됩니다.

🧭 숫자 리터럴 문법 완전 정리

파이썬의 숫자 리터럴 문법은 단순히 ‘값을 적는 방법’이 아니라, 프로그램의 가독성과 안정성을 높이는 중요한 도구입니다.
0b 0o 0x 접두사를 통해 다양한 진법을 표현하고, 언더스코어로 자릿수를 구분하며, 복소수와 지수표기까지 지원한다는 점은 파이썬이 과학 계산과 일반 프로그래밍 모두에 적합한 언어임을 보여줍니다.
이러한 표기법을 정확히 이해하고 활용하면, 복잡한 데이터 연산에서도 숫자 표현이 명확해지고 디버깅이 쉬워집니다.

요약하자면, 2진수·8진수·16진수는 각각 0b, 0o, 0x로 시작하며, 언더스코어는 읽기 편한 숫자 구분에 유용합니다.
복소수는 실수부+허수부j 형태로 간단히 표현할 수 있고, 지수표기법은 큰 수나 작은 수를 깔끔하게 다루는 데 효과적입니다.
이 모든 규칙은 실제 값에 영향을 주지 않고 표현만 바꿀 뿐이므로, 문법 오류만 주의하면 안정적으로 사용할 수 있습니다.

💡 TIP: 숫자 리터럴의 표현법을 프로젝트 전반에서 통일하면, 코드 리뷰나 협업 시 혼선을 줄일 수 있습니다.
예를 들어, 모든 상수는 16진수로 통일하거나, 금액 단위에는 언더스코어를 쓰는 식의 일관된 규칙을 정해보세요.


🏷️ 관련 태그 : 파이썬기초, 숫자리터럴, 2진수표현, 16진수표현, 언더스코어문법, 복소수, 지수표기법, 파이썬문법, 프로그래밍입문, 코딩기초