숫자 리터럴

나루 위키
둘러보기로 가기 검색하러 가기

숫자 리터럴자연수 타입 또는 유리수 타입의 값을 반환하는 원자적 표현식이다.

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 -- 오류: 지수부에만 쓰였어도 마찬가지

숫자 리터럴의 뒤에는 리터럴 접사가 붙을 수 있다.