숫자 리터럴
둘러보기로 가기
검색하러 가기
숫자 리터럴은 자연수 타입 또는 유리수 타입의 값을 반환하는 원자적 표현식이다.
1 42 3.141592 1_000_000_000 1e50 1_000_000_000.1_23_456_7890e-80 0xdeadbeef 0b0100_0001
중간에 .
이 들어 있으면 유리수, 아니면 자연수가 된다. .
이 들어 있을 경우 앞뒤에 숫자가 한 자리라도 있어야 한다.
-- 자연수 리터럴의 예 1 42 12345678901234567890 -42 -- 이것은 정수 리터럴이 아니다. `-`는 리터럴에 포함되지 않는다. -- 유리수 리터럴의 예 0.0 13.456 1. -- 오류: `.` 뒤에 숫자가 따라 오지 않음 .1 -- 오류: `.` 앞에 자릿수가 하나도 없음
뒤에 .
가 나타나지 않을 경우 맨 앞에 0b
(2진법), 0o
(8진법) 또는 0x
(16진법, 0..9 및 a/A..f/F)를 덧붙여 진법을 표현할 수 있다. 따로 쓰지 않았을 경우 10진법을 가정한다. 10진법이 아닌 숫자를 사용할 경우 그 뒤에 따르는 숫자는 모두 해당 진법의 자릿수여야 한다.
100000000 0b100000000 -- 256과 동일 0o100000000 -- 16777216과 동일 0x100000000 -- 4294967296과 동일 00100000000 -- 100000000과 동일. 앞에 붙은 0은 무시된다 0b222 -- 오류: `2`는 2진법 자릿수가 아님 0o999 -- 오류: `9`는 8진법 자릿수가 아님 0xGGG -- 오류: `G`는 16진법 자릿수가 아님 (단, [[리터럴 접사]]로 해석될 가능성은 있음)
자리와 자리 사이에는 _
가 최대 하나 들어갈 수 있다. .
주변이나 숫자 맨 앞 또는 맨 뒤에는 들어갈 수 없다.
1234567.890 1_23_456_7.890 12345_67.8_90 12___34567.890 -- 오류: `_`가 여러 개 들어 있음 _1234567.890 -- `_`가 맨 앞에 들어 있음, `_1234567`은 숫자가 아니라 이름이다. 1234567.890_ -- 오류: `_`가 맨 뒤에 들어 있음 1234567_.890 -- 오류: `_`가 `.`에 바로 인접함
10진법 리터럴에는 지수부가 뒤에 붙을 수 있다. 지수부에는 부호가 붙을 수 있으며, 지수부의 자릿수 사이에 _
가 최대 하나 들어갈 수 있다. 지수부는 .
의 여부에 무관하게 적용 가능하지만, .
가 없어서 자연수 리터럴인데 지수부를 해석한 결과에 0이 아닌 소수부가 나오면 오류이다.
1e10 -- 1_00000_00000과 같음 1e1_0 -- 1e10과 같음 1e+10 -- 1e10과 같음 1e-10 -- 오류: 0.0000000001은 정수가 아님 1.0e-10 -- 0.0000000001과 같음 10e-1 -- 1과 같음 ([[자연수]]) 10.0e-1 -- 1.0과 같음 ([[유리수]])
10진법 리터럴에서는 0
..9
뿐만 아니라 다른 십진 자리 문자를 사용할 수 있다. 만약 다른 종류의 자릿수를 사용할 경우, 해당 리터럴에 나오는 모든 자릿수(지수부 포함)가 동종이어야 한다. 10진법이 아닌 리터럴에서는 다른 종류의 자릿수를 사용할 수 없다.
๑๒ -- 타이어 숫자 12 ๑_๒ -- 위와 같음 ๑2 -- 오류: 서로 다른 종류의 숫자가 사용됨 ๑_2 -- 오류: 밑줄로 구분되어 있어도 마찬가지 ๑๒e1 -- 오류: 지수부에만 쓰였어도 마찬가지
숫자 리터럴의 뒤에는 리터럴 접사가 붙을 수 있다.