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ı 5894345ULL
sö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 9
a
(F
veya A
) arasında bir basamak 0
dizisiyle f
0X
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 E
kullanı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 18E0
tam sayılarda gereksizdir.
Kayan nokta değişmez değerleri varsayılan olarak türüne sahiptir double
. Veya veya veya F
l
L
(sonek büyük/küçük harfe duyarlı değildir) kullanılarakf
, değişmez değer veya long double
olarak 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 NULL
makrolar 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
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin