리터럴:코드에직접 적어두고 한눈에 값을 알 수 있는상수 데이터로 프로그램의 가장 기본적인 데이터 표현 방식입니다.
값이 고정되어 바뀌지 않고코드에 하드코딩되어 실행 중 변경할 수 없습니다. 별도 연산이나 변수 해석이 필요 없으며 글자 그대로 “문자 그대로의 값”이라는 뜻입니다.
예시:아래 13, 3.14가 리터럴이며 다른 언어에서는 값 리터럴이라고 부르기도 합니다.
fn main() {
println!("{}", 13);
println!("{}", 3.14);
}Code language: JavaScript (javascript)
학습 편의를 위해 공식에서 온라인 Rust 편집 툴을 제공합니다. 로컬 환경 설치 없이 웹에서 Rust 기본 문법을 연습할 수 있으며 아래 링크를 클릭하세요.
리터럴
Rust는정수, 부동소수점, 문자, 문자열, 불리언, 유닛(unit) 타입리터럴을 지원합니다.
- 정수:
11 - 문자:
'a'(작은 따옴표) - 문자열:
"abc"(큰 따옴표) - 불리언:
true/false - 유닛 타입:
()
정수 다양한 진법 표기법
접두사로 진법을 구분하며 정수에만 사용합니다.
- 16진수:
0x로 시작, 예:0x1F - 8진수:
0o로 시작, 예:0o77 - 2진수:
0b로 시작, 예:0b1010
숫자 구분자
숫자 리터럴 안에밑줄 _을 삽입해 가독성을 높일 수 있으며실제 숫자 값에는 영향을 주지 않습니다.
- 정수:
1_000=1000 - 부동소수점:
0.000_001=0.000001
과학적 표기법
부동소수점은 E 과학 표기법을 지원하며 기본 타입은f64입니다.
1e6= 10000007.6e-4= 0.00076
리터럴 타입 접미사(핵심)
Rust는 리터럴 타입을 명확히 지정해야 하며 자주 사용하는 접미사는 다음과 같습니다.
u32:32비트부호 없는정수(음수 불가)i32:32비트부호 있는정수(양수 음수 모두 지원)
주의:부호 있는 정수와 부호 없는 정수를 혼합 연산하면 바로 컴파일 오류가 발생합니다.
예시 코드:
fn main() {
// 1. 일반 정수 리터럴
println!("정수: {}", 13);
// 2진수, 8진수, 16진수 정수
println!("2진수: {}", 0b1010);
println!("8진수: {}", 0o77);
println!("16진수: {}", 0x2A);
// 구분자 포함 정수(가독성 향상)
println!("밑줄 포함 정수: {}", 1_000_000);
// 타입 접미사가 붙은 정수
println!("u32 부호 없는 정수: {}", 100u32);
println!("i32 부호 있는 정수: {}", -50i32);
// 2. 부동소수점 리터럴
println!("부동소수점: {}", 3.14);
// 밑줄 포함 부동소수점
println!("밑줄 포함 부동소수점: {}", 0.000_001);
// 과학적 표기법 부동소수점
println!("과학적 표기법: {}", 1e6);
println!("음수 과학 표기법: {}", 7.6e-4);
// 3. 문자열 리터럴(큰 따옴표)
println!("문자열: {}", "hello world");
// 4. 문자 리터럴(작은 따옴표, 한 글자만 입력 가능)
println!("문자: {}", 'a');
println!("한자 문자: {}", '中');
// 5. 불리언 리터럴
println!("불리언 true: {}", true);
println!("불리언 false: {}", false);
// 6. 유닛 리터럴 ()(Rust 유닛 타입)
println!("유닛 타입: {:?}", ());
}Code language: JavaScript (javascript)
연산자
Rust 연산자의 규칙과 우선순위는 C 계열 언어와 거의 동일합니다.
1. 산술 연산자
덧셈, 뺄셈 등 기본 숫자 연산이며 정수 타입 접미사와 함께 사용합니다.
- 덧셈:
+ - 뺄셈:
-
2. 불리언 논리 연산자(단락 회로 논리)
오직 true/false 불리언 값에만 적용할 수 있습니다.
- 논리곱
&&:양쪽 모두 true일 때 결과가 true - 논리합
||:한쪽만 true여도 결과가 true - 부정
!:불리언 값 반전
| 표현식 | 연산 결과 |
|---|---|
| true && true | true |
| true && false | false |
| false && true | false |
| false && false | false |
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
| !true | false |
| !false | true |
3. 비트 연산(2진 비트 조작)
주로 정수에 사용하며 예시에서 {:04b}로4자리 2진수를 포맷 출력합니다.
- 비트곱
&:같은 자리 둘 다 1일 때 결과가 1 - 비트합
|:같은 자리 하나라도 1이면 결과가 1 - 배타적 논리합
^:같은 자리 값이 다르면 1, 같으면 0 - 왼쪽 시프트
<<:2진수를 통째로 왼쪽 이동(×2ⁿ 동일) - 오른쪽 시프트
>>:2진수를 통째로 오른쪽 이동(÷2ⁿ 동일)
0 0 1 1
& 0 1 0 1
-----------
0 0 0 1
0 0 1 1
| 0 1 0 1
-----------
0 1 1 1
0 0 1 1
^ 0 1 0 1
-----------
0 1 1 0
왼쪽 시프트 <<
2진수:00000001
5비트 왼쪽 이동 → 00100000, 결과 = 32
오른쪽 시프트 >>
0x80 2진수:10000000
2비트 오른쪽 이동 → 00100000(16진수 0x20), 결과 = 32
fn main() {
// ========== 산술 연산자 ==========
// 정수 덧셈:u32 32비트 부호 없는 정수
// 실행 결과:1 + 2 = 3
println!("1 + 2 = {}", 1u32 + 2);
// 정수 뺄셈:i32 32비트 부호 있는 정수, 음수 지원
// 1u32로 변경하면 오류 발생, 부호 없는 정수는 음수 표현 불가
// 실행 결과:1 - 2 = -1
println!("1 - 2 = {}", 1i32 - 2);
// ========== 부동소수점 리터럴 - 과학적 표기법 ==========
// 실행 결과:1e4 는 10000, -2.5e-3 는 -0.0025
println!("1e4 는 {}, -2.5e-3 는 {}", 1e4, -2.5e-3);
// ========== 불리언 논리 연산자(단락 회로 연산) ==========
// 논리곱 &&:양쪽 모두 true여야 결과 true
// 실행 결과:true 논리곱 false = false
println!("true 논리곱 false = {}", true && false);
// 논리합 ||:한쪽만 true여도 결과 true
// 실행 결과:true 논리합 false = true
println!("true 논리합 false = {}", true || false);
// 부정 !:불리언 값 반전
// 실행 결과:부정 true = false
println!("부정 true = {}", !true);
// ========== 비트 연산자(2진 비트 조작) ==========
// {:04b} 4자리 2진수 고정 출력, 자릿수 부족시 왼쪽 0 채움
// 비트곱 &:같은 자리 모두 1이어야 결과 1
// 실행 결과:0011 비트곱 0101 = 0001
println!("0011 비트곱 0101 = {:04b}", 0b0011u32 & 0b0101);
// 비트합 |:같은 자리 하나라도 1이면 결과 1
// 실행 결과:0011 비트합 0101 = 0111
println!("0011 비트합 0101 = {:04b}", 0b0011u32 | 0b0101);
// 배타적 논리합 ^:같은 자리 값 다르면 1, 같으면 0
// 실행 결과:0011 배타적 논리합 0101 = 0110
println!("0011 배타적 논리합 0101 = {:04b}", 0b0011u32 ^ 0b0101);
// 왼쪽 시프트 <<:2진수 전체 5비트 왼쪽 이동
// 실행 결과:1 을 5비트 왼쪽 시프트 = 32
println!("1 을 5비트 왼쪽 시프트 = {}", 1u32 << 5);
// 오른쪽 시프트 >>:2진수 전체 2비트 오른쪽 이동, {:x} 16진수 출력
// 실행 결과:0x80 을 2비트 오른쪽 시프트 = 0x20
println!("0x80 을 2비트 오른쪽 시프트 = 0x{:x}", 0x80u32 >> 2);
// ========== 숫자 구분 밑줄 _ ==========
// 밑줄은 가독성 향상만 목적, 숫자 값 변경 X
// 실행 결과:백만 표기:1000000
println!("백만 표기:{}", 1_000_000u32);
}Code language: JavaScript (javascript)
3. 코드 실행 보충 설명
1i32를1u32로 바꿔 뺄셈1u32 - 2을 실행하면 오류가 발생합니다. 부호 없는 정수는 음수를 표현할 수 없기 때문입니다.{:04b}:포맷 출력 문법,b는 2진수를 의미하며04는 자릿수가 4자리 미만일 경우 왼쪽을 0으로 채웁니다.- 큰 수는 밑줄로 구분하는 것을 추천(예:
1_000_000u32)코드 가독성이 더 좋아집니다.