Literal numerik, boolean, dan pointer
Literal adalah elemen program yang secara langsung mewakili nilai. Artikel ini membahas literal bilangan bulat jenis, floating-point, boolean, dan pointer. Untuk informasi tentang string dan literal karakter, lihat String dan Literal Karakter (C++). Anda juga dapat menentukan literal Anda sendiri berdasarkan salah satu kategori ini. Untuk informasi selengkapnya, lihat Literal yang ditentukan pengguna (C++).
Anda dapat menggunakan literal dalam banyak konteks, tetapi paling umum untuk menginisialisasi variabel bernama dan meneruskan argumen ke fungsi:
const int answer = 42; // integer literal
double d = sin(108.87); // floating point literal passed to sin function
bool b = true; // boolean literal
MyClass* mc = nullptr; // pointer literal
Terkadang penting untuk memberi tahu pengkompilasi cara menginterpretasikan harfiah, atau jenis spesifik apa yang harus diberikan kepadanya. Ini dilakukan dengan menambahkan awalan atau akhiran ke literal. Misalnya, awalan 0x
memberi tahu pengkompilasi untuk menginterpretasikan angka yang mengikutinya sebagai nilai heksadesimal, misalnya 0x35
. Akhiran ULL
memberi tahu pengkompilasi untuk memperlakukan nilai sebagai unsigned long long
jenis, seperti dalam 5894345ULL
. Lihat bagian berikut untuk daftar lengkap awalan dan akhiran untuk setiap jenis literal.
Literal integer
Literal bilangan bulat dimulai dengan digit dan tidak memiliki bagian pecahan atau eksponen. Anda dapat menentukan literal bilangan bulat dalam bentuk desimal, biner, oktal, atau heksadesimal. Anda dapat secara opsional menentukan bilangan bulat harfiah sebagai tidak ditandatangani, dan sebagai jenis panjang atau panjang, dengan menggunakan akhiran.
Ketika tidak ada awalan atau akhiran yang ada, pengkompilasi akan memberikan jenis int
nilai literal integral (32 bit), jika nilainya akan cocok, jika tidak, itu akan memberinya jenis long long
(64 bit).
Untuk menentukan literal integral desimal, mulai spesifikasi dengan digit bukan nol. Contohnya:
int i = 157; // Decimal literal
int j = 0198; // Not a decimal number; erroneous octal literal
int k = 0365; // Leading zero specifies octal literal, not decimal
int m = 36'000'000 // digit separators make large values more readable
Untuk menentukan literal integral oktal, mulai spesifikasi dengan 0, diikuti dengan urutan digit dalam rentang 0 hingga 7. Digit 8 dan 9 adalah kesalahan dalam menentukan literal oktal. Contohnya:
int i = 0377; // Octal literal
int j = 0397; // Error: 9 is not an octal digit
Untuk menentukan literal integral heksadesimal, mulai spesifikasi dengan 0x
atau 0X
(kasus "x" tidak masalah), diikuti dengan urutan digit dalam rentang 0
melalui 9
dan a
(atau A
) melalui f
(atau F
). Digit a
heksadesimal (atau A
) melalui f
(atau F
) mewakili nilai dalam rentang 10 hingga 15. Contohnya:
int i = 0x3fff; // Hexadecimal literal
int j = 0X3FFF; // Equal to i
Untuk menentukan jenis yang tidak ditandatangani, gunakan akhiran u
atau U
. Untuk menentukan jenis panjang, gunakan akhiran l
atau L
. Untuk menentukan jenis integral 64-bit, gunakan LL, atau akhiran ll. Akhiran i64 masih didukung, tetapi kami tidak merekomendasikannya. Ini khusus untuk Microsoft dan tidak portabel. Contohnya:
unsigned val_1 = 328u; // Unsigned value
long val_2 = 0x7FFFFFL; // Long value specified
// as hex literal
unsigned long val_3 = 0776745ul; // Unsigned long value
auto val_4 = 108LL; // signed long long
auto val_4 = 0x8000000000000000ULL << 16; // unsigned long long
Pemisah digit: Anda dapat menggunakan karakter tanda kutip tunggal (apostrof) untuk memisahkan nilai tempat dalam angka yang lebih besar untuk membuatnya lebih mudah dibaca oleh manusia. Pemisah tidak berpengaruh pada kompilasi.
long long i = 24'847'458'121;
Harfiah titik mengambang
Literal floating-point menentukan nilai yang harus memiliki bagian pecahan. Nilai-nilai ini berisi titik desimal (.
) dan dapat berisi eksponen.
Literal floating-point memiliki significand (kadang-kadang disebut mantissa), yang menentukan nilai angka. Mereka memiliki eksponen, yang menentukan besarnya jumlah. Dan, mereka memiliki akhiran opsional yang menentukan jenis harfiah. Significand ditentukan sebagai urutan digit diikuti oleh titik, diikuti dengan urutan digit opsional yang mewakili bagian pecahan dari angka. Contohnya:
18.46
38.
Eksponen, jika ada, menentukan besarnya angka sebagai kekuatan 10, seperti yang ditunjukkan dalam contoh berikut:
18.46e0 // 18.46
18.46e1 // 184.6
Eksponen dapat ditentukan menggunakan e
atau E
, yang memiliki arti yang sama, diikuti dengan tanda opsional (+ atau -) dan urutan digit. Jika eksponen ada, titik desimal berikutnya tidak perlu dalam bilangan bulat seperti 18E0
.
Harfiah floating-point default untuk mengetik double
. Dengan menggunakan akhiran f
atau atau l
atau F
L
(akhiran tidak peka huruf besar/kecil), literal dapat ditentukan sebagai float
atau long double
.
Meskipun long double
dan double
memiliki representasi yang sama, mereka bukan jenis yang sama. Misalnya, Anda dapat memiliki fungsi yang kelebihan beban seperti
void func( double );
dan
void func( long double );
Harfiah Boolean
Harfiah boolean adalah true
dan false
.
Pointer literal (C++11)
C++ memperkenalkan nullptr
literal untuk menentukan pointer yang diinisialisasi nol. Dalam kode portabel, nullptr
harus digunakan alih-alih nol jenis integral atau makro seperti NULL
.
Literal biner (C++14)
Literal biner dapat ditentukan dengan penggunaan awalan 0B
atau 0b
, diikuti dengan urutan 1 dan 0:
auto x = 0B001101 ; // int
auto y = 0b000001 ; // int
Hindari menggunakan literal sebagai "konstanta ajaib"
Anda dapat menggunakan literal secara langsung dalam ekspresi dan pernyataan meskipun tidak selalu praktik pemrograman yang baik:
if (num < 100)
return "Success";
Dalam contoh sebelumnya, praktik yang lebih baik adalah menggunakan konstanta bernama yang menyampaikan arti yang jelas, misalnya "MAXIMUM_ERROR_THRESHOLD". Dan jika nilai pengembalian "Berhasil" dilihat oleh pengguna akhir, maka mungkin lebih baik menggunakan konstanta string bernama. Anda dapat menyimpan konstanta string dalam satu lokasi dalam file yang dapat dilokalkan ke bahasa lain. Menggunakan konstanta bernama membantu diri Anda dan orang lain untuk memahami niat kode.
Baca juga
Konvensi leksikal
Literal string C++
Literal yang ditentukan pengguna C++
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk