Bagikan melalui


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 FL (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++