Programı ve verileri bellekte 0 ve 1’ler halinde tutuyoruz. Bu 0 ve 1 leri kullanabilmek için öncelikle onlara bir anlam yüklemeliyiz, onları tanımlamalı, isimlendirmeliyiz. İşte değişkenler tam da bu işe yarıyor.
- Bir değişken bellekte belli bir alan kaplar 1byte 2 byte …
- Bir değişkenin belli bir ismi vardır.
- Bir değişkeni işlem yapmak için kullanabiliriz. Burada sadece matematiksel toplama çıkarma olarak düşünmeyin. Eğer değişkeniniz bir renk ise o rengin bir üst tonunu verecek bir işlem de olabilir.
Biraz bellek hakkında konuşalım. Bellek tek sütundan oluşan upuzun bir tablodur. Her satırında 1 byte’lık veri vardır.
1 byte |
1 byte |
1 byte |
1 byte |
… |
1 byte |
1 byte |
Her değişkenin bellekte belli bir adres ve kapladığı alan vardır. Adres dediğimiz şey ise kaba bir tabirle bellekteki satır numarası.
Bir değişkenin adresini öğrenmek için & operatörünü kullanıyoruz.
int main() {
int sayi = 5;
cout << &sayi << endl; // 0000005687EFF574
}
Değişken isimlendirme kuralları
Değişkenlerimize isim verilken dikkat etmemiz gereken bazı hususlar bulunmakta.
- Değişken isimleri sadece ve sadece harf, rakam veya _ (alt çizgi) içerebilir
- Değişken isimleri rakam ile başlayamaz
- Case-senstive’dir. (Büyük-küçük harf duyarlılığı). Yani int ali; ile int Ali; farklı değişkenlerdir.
- Değişken isimleri herhangibir boşluk veya özel karakter içeremez.
- Reserved words, değişken ismi olamaz. Yani C++’ın kullanımı için ayrılmış isimler. Örneğin int int; olamaz. int not; olamaz çünkü not da C++’ın kullanımına ayrılmıştır.
Definition and Initialization
- Definition: Bellekte değişken için bir yer ayırır ama değer ataması yapılmamıştır.
- Initialization: Yer ayırıp değer atamasını yapar.
int a; // definition
int a = 5; // initialization
int a(5); // initialization
int a{ 5 }; // initialization
https://learn.microsoft.com/en-us/cpp/cpp/declarations-and-definitions-cpp?view=msvc-170
Primitive Data Types
Programlama dilinin bize sunmuş olduğu en temel değişkenlerdir.
INTEGER
Tamsayıları temsil etmek için kullanırız. Şöyle güzel bir tablomuz var. Bu tabloda farklı tamsayı türlerini görüyoruz. Bunları ezberlemenize gerek yok.
Type specifier | Equivalent type | Width in bits by data model | ||||
---|---|---|---|---|---|---|
C++ standard | LP32 | ILP32 | LLP64 | LP64 | ||
signed char | signed char | at least 8 | 8 | 8 | 8 | 8 |
unsigned char | unsigned char | |||||
short | short int | at least 16 | 16 | 16 | 16 | 16 |
short int | ||||||
signed short | ||||||
signed short int | ||||||
unsigned short | unsigned short int | |||||
unsigned short int | ||||||
int | int | at least 16 | 16 | 32 | 32 | 32 |
signed | ||||||
signed int | ||||||
unsigned | unsigned int | |||||
unsigned int | ||||||
long | long int | at least 32 | 32 | 32 | 32 | 64 |
long int | ||||||
signed long | ||||||
signed long int | ||||||
unsigned long | unsigned long int | |||||
unsigned long int | ||||||
long long | long long int (C++11) | at least 64 | 64 | 64 | 64 | 64 |
long long int | ||||||
signed long long | ||||||
signed long long int | ||||||
unsigned long long | unsigned long long int (C++11) | |||||
unsigned long long int |
Daha özet bir şekilde aktarmak gerekirse. Byte cinsinden boyutu küçükten büyüğe doğru sıralarsak:
- char
- short
- int
- long
- long long
Ayrıca signed ve unsigned olarak ikiye ayrılıyorlar.
- signed (işaretli): pozitif ve negatif değerler alabilir. (-3, 0, 3 gibi)
- unsigned (işaretsiz): sadece pozitif değerler alabilir. (0, 3 gibi)
Float
Kayan noktalı sayıları göstermek için kullanılır. 0.5, 3.14 gibi
- float: 4 byte
- double: 8 byte (yani daha hassas)
// creating float type variables
float num1 = 3.0f;
float num2 = 3.5f;
float num3 = 3E-5f; // 3x10^-5
// creating double type variables
double num4 = 3.0;
double num5 = 3.5;
double num6 = 3E-5; // 3x10^-5
float atamalarında sayıların yanına f yazıldığına dikkat edelim.
- 3.0f -> float literal
- 3.0 -> double literal
Bunu yazmasak da programımız düzgün çalışır. Çünkü compiler arka tarafta bu tip dönüşümleri bizim için yapıyor
- (no suffix) defines double
f F
defines floatl L
defines long double- https://en.cppreference.com/w/cpp/language/floating_literal
Char
Hem karakter hem de sayıları temsil etmek için kullanıyoruz.
- char a = ‘A’; char a = ‘a’;
- Karakter için ‘ string için ” kullanıyoruz.
- std::string bir primitive data type değildir.
Bool
Mantıksal veri tipidir. 2 değer alabilir
- true
- false
bool control = true;
if(control)
cout << "hello" << endl;
true false yerine sayı veya pointer gibi farklı şeyler de kullanabiliriz.
#include <iostream>
using namespace std;
int main() {
int a = 2, b = 0;
if (a)
cout << "a=2" << "\ttrue" << endl;
else
cout << "a=2" << "\tfalse" << endl;
if (b)
cout << "b=0" << "\ttrue" << endl;
else
cout << "b=0" << "\tfalse" << endl;
// a = 2 true
// b = 0 false
}
Leave a Reply