Aracılığıyla paylaş


Sayısal, boole ve işaretçi değişmez değerleri

Değişmez değer, bir değeri doğrudan temsil eden bir program öğesidir. Bu makale tamsayı, kayan nokta, boole ve işaretçi türü değişmez değerlerini kapsar. Dize ve karakter değişmez değerleri hakkında bilgi için bkz . Dize ve Karakter Değişmez Değerleri (C++). Bu kategorilerden herhangi birine göre kendi değişmez değerlerinizi de tanımlayabilirsiniz. Daha fazla bilgi için bkz . Kullanıcı tanımlı değişmez değerler (C++).

Değişmez değerleri birçok bağlamda kullanabilirsiniz, ancak en yaygın olarak adlandırılmış değişkenleri başlatmak ve bağımsız değişkenleri işlevlere geçirmek için:

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

Bazen derleyiciye bir değişmez değeri nasıl yorumlayacaklarını veya hangi türe verileceklerini söylemek önemlidir. Sabit değere ön ekleri veya son ekleri ekleyerek yapılır. Örneğin, ön ek 0x derleyiciye onu izleyen sayıyı onaltılık değer olarak yorumlamasını söyler, örneğin 0x35. Sonek, ULL derleyiciye değerini içinde olduğu gibi bir unsigned long long tür olarak ele almalarını 5894345ULLsöyler. Her değişmez değer türü için ön eklerin ve soneklerin tam listesi için aşağıdaki bölümlere bakın.

Tamsayı değişmez değerleri

Tamsayı değişmez değerleri bir rakamla başlar ve kesirli bölümleri veya üsleri yoktur. Tamsayı değişmez değerlerini ondalık, ikili, sekizlik veya onaltılık biçimde belirtebilirsiniz. İsteğe bağlı olarak, bir sonek kullanarak bir tamsayı değişmez değerini işaretsiz ve uzun veya uzun bir tür olarak belirtebilirsiniz.

Hiçbir ön ek veya sonek olmadığında, derleyici tam sayı değişmez değer türü int (32 bit) verir, değer sığarsa, aksi takdirde ona tür long long (64 bit) verir.

Ondalık integral değişmez değeri belirtmek için belirtimi sıfır olmayan bir basamakla başlatın. Örnek:

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

Sekizli tam sayı değişmez değerini belirtmek için belirtimi 0 ile başlatın ve ardından 0 ile 7 arasında bir basamak dizisi ekleyin. 8 ve 9 basamakları sekizlik değişmez değer belirtme hatalarıdır. Örnek:

int i = 0377;   // Octal literal
int j = 0397;   // Error: 9 is not an octal digit

Onaltılık tamsayı değişmez değerini belirtmek için belirtimi veya ile 0x başlatın ("x" harfi önemli değildir), ardından ve (veya ) ile 9a (Fveya A) arasında bir basamak 0 dizisiyle f0X başlayın. a (veya A) ile f (veya F) arasındaki onaltılık basamaklar, 10 ile 15 aralığındaki değerleri temsil eder. Örnek:

int i = 0x3fff;   // Hexadecimal literal
int j = 0X3FFF;   // Equal to i

İmzasız bir tür belirtmek için veya U sonekini u kullanın. Uzun bir tür belirtmek için veya L sonekini l kullanın. 64 bit tam sayı türü belirtmek için LL veya ll sonekini kullanın. i64 soneki hala desteklenmektedir, ancak önermiyoruz. Microsoft'a özeldir ve taşınabilir değildir. Örnek:

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

Basamak ayırıcıları: Tek tırnak karakterini (kesme işareti) kullanarak değerleri daha büyük sayılarda ayırarak insanların okumasını kolaylaştırabilirsiniz. Ayırıcıların derleme üzerinde hiçbir etkisi yoktur.

long long i = 24'847'458'121;

Kayan nokta değişmez değerleri

Kayan nokta değişmez değerleri, kesirli bölümü olması gereken değerleri belirtir. Bu değerler ondalık noktalar (.) içerir ve üsler içerebilir.

Kayan nokta değişmez değerleri, sayının değerini belirten bir işaret işaretine (bazen mantis denir) sahiptir. Sayının büyüklüğünü belirten bir üsleri vardır. Ayrıca, değişmez değerin türünü belirten isteğe bağlı bir sonekleri vardır. İşaretleme, bir basamak dizisi ve ardından nokta ve ardından sayının kesirli bölümünü temsil eden isteğe bağlı bir basamak dizisi olarak belirtilir. Örnek:

18.46
38.

Üs varsa, aşağıdaki örnekte gösterildiği gibi sayının büyüklüğünü 10'un gücü olarak belirtir:

18.46e0      // 18.46
18.46e1      // 184.6

Üs, aynı anlama sahip veya Ekullanılarak e belirtilebilir ve ardından isteğe bağlı bir işaret (+ veya -) ve bir basamak dizisi gelir. Bir üs varsa, sondaki ondalık ayırıcı gibi 18E0tam sayılarda gereksizdir.

Kayan nokta değişmez değerleri varsayılan olarak türüne sahiptir double. Veya veya veya FlL (sonek büyük/küçük harfe duyarlı değildir) kullanılarakf, değişmez değer veya long doubleolarak float belirtilebilir.

Ve double aynı gösterime sahip olsa long double da, aynı türde değildir. Örneğin, gibi aşırı yüklenmiş işlevleriniz olabilir

void func( double );

ve

void func( long double );

Boole değişmez değerleri

Boole değişmez değerleri ve falseşeklindedirtrue.

İşaretçi değişmez değeri (C++11)

C++ sıfır başlatılan bir işaretçi belirtmek için değişmez değeri tanıtır nullptr . Taşınabilir kodda, nullptr tam sayı türü sıfır veya gibi NULLmakrolar yerine kullanılmalıdır.

İkili değişmez değerler (C++14)

İkili sabit değer, veya 0b ön ekinin 0B kullanılmasıyla ve ardından 1'ler ve 0'lar dizisiyle belirtilebilir:

auto x = 0B001101 ; // int
auto y = 0b000001 ; // int

Değişmez değerleri "sihirli sabitler" olarak kullanmaktan kaçının

Değişmez değerleri doğrudan ifadelerde ve deyimlerde kullanabilirsiniz, ancak her zaman iyi bir programlama uygulaması değildir:

if (num < 100)
    return "Success";

Önceki örnekte daha iyi bir yöntem, "MAXIMUM_ERROR_THRESHOLD" gibi net bir anlam ifade eden adlandırılmış bir sabit kullanmaktır. "Başarılı" dönüş değeri son kullanıcılar tarafından görülürse adlandırılmış dize sabiti kullanmak daha iyi olabilir. Dize sabitlerini, başka dillerde yerelleştirilebilen bir dosyada tek bir konumda tutabilirsiniz. Adlandırılmış sabitleri kullanmak hem sizin hem de başkalarının kodun amacını anlamasına yardımcı olur.

Ayrıca bkz.

Sözcük temelli kurallar
C++ dize değişmez değerleri
C++ kullanıcı tanımlı değişmez değerler