소소한 개발 공부

[C#] 진법에 따른 숫자 리터럴 본문

프로그래밍/C#

[C#] 진법에 따른 숫자 리터럴

이내내 2023. 1. 26. 00:22

우선 리터럴은 변수에 직접 정수형 또는 문자열 값을 저장할 수 있는 값 자체를 말한다.

변수에 어떤 값을 대입하면 그 오른쪽에 오는 하드코딩된 값이라고 보면 되겠다.

ex) int tmp = 10; // 여기서 10이 리터럴

예시로 null, true, false, 10, 0x80, 0.12f, ... 이 있다.

 

참고로 리터럴은 상수와는 좀 다르다.

변수와 상수가 있는데 변수는 프로그램 내에서 값이 변할 수 있는, 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간이다.

상수는 프로그램 내에서 값이 변하지 않는, 값이 고정되어 있는 메모리 공간이다.

리터럴은 이 변수와 상수에 들어가는 값이다.

 

정수 리터럴

C#에서 정수 리터럴은 2진수, 16진수, 10진수 별로 나뉜다.

먼저 2진수는 0b(혹은 0B)를 접두사로 써서 2진법 숫자로 표현한다.

16진수는 0x(혹은 0X)를 접두사로 써서 16진법 숫자로 표현한다.

10진수는 아무 접두사 없이 10진수 그대로 표현한다. 

 

10진수 72를 예시로 들어보자.

2진수 16진수 10진수
0b01001000 0x48 72

 

추가로 0b01001000이 너무 길다.

알아보기 쉽지 않다.

그래서 여기에 밑줄 구분자를 사용할 수 있다.

 

밑줄 구분자 

숫자의 가독성을 위해 추가된 방법

Ex) 0b0100_1000

컴파일러는 _(언더 바)를 무시하며 실제로 실행시키면 0b01001000으로 인식한다.

 

제약 사항

  • 리터럴의 맨 앞쪽/맨 뒤쪽에 밑줄을 추가할 수 없음
    • ex) _0x10 or 0x10_ 불가
  • 실수 리터럴의 마침표 앞쪽이나 뒤쪽에 밑줄을 추가할 수 없음
    • ex) 3_.14 or 3._14 불가

 

주의해야할 점은 _를 무시하기 때문에 잘 못 위치해도 경고를 하지 않는다.

예를 들어

7______2 도 72로 인식한다.

0b00_001_0000 도 0b0000010000로 인식한다.

잘못 사용하면 오히려 오해하기 쉬울 수 있으므로 작성할 때 주의해야 한다.