🚀 C# ile Programlamaya Giriş: Kodlamaya İlk Adımını At, Kendi Projelerini Geliştirmeye Başla!
00ANASAYFA 01YAZILAR 02EĞİTİM 03ELEKTRİK_ENERJİ 04OTOMOTİV_MÜHENDİSLİĞİ 05ARAÇLAR 06LAB 07SÖZLÜK 08ETİKETLER ♡OKUMA LİSTEM ⌕ARA
TRENG

Değişkenler ve veri tipleri

int, double, char, bool, std::string, const ve auto; tam sayı bölmesi, taşma ve ADC dönüşümü örneğiyle.

Değişken, bellekte bir değeri saklayan ve ona isim veren kutudur. C++ statik tipli bir dildir: her değişkenin tipi derleme anında bellidir ve sonradan değişmez. Bu katılık ilk başta yorucu görünür ama hataları program çalışmadan yakalar.

Temel tipler

TipNe saklar?Tipik boyut
intTam sayı4 bayt
doubleOndalıklı sayı (hassas)8 bayt
floatOndalıklı sayı (daha az hassas)4 bayt
charTek karakter1 bayt
booltrue ya da false1 bayt
std::stringMetindeğişken

Boyutlar platforma göre değişebilir; sizeof(int) ile kendi derleyicinde ölçebilirsin. Gömülü sistemlerde boyutun kesin olması gerekir. O zaman <cstdint> başlığındaki std::uint8_t, std::int16_t, std::uint32_t gibi tipleri kullanırsın.

ADC örneği

Bir mikrodenetleyicinin 10 bitlik ADC'si 0-1023 arası bir sayı okur. Referans gerilimi 3,3 V ise okunan sayıyı gerilime çevirmek için V = okuma * Vref / 1023 formülünü kullanırız.

#include <cstdint>
#include <iomanip>
#include <iostream>
#include <string>

int main() {
    const double vref = 3.3;
    const int adcMax = 1023;
    int okuma = 512;
    double gerilim = okuma * vref / adcMax;

    std::cout << std::fixed << std::setprecision(3);
    std::cout << "ADC: " << okuma << " -> " << gerilim << " V\n";

    std::cout << "7 / 2   = " << 7 / 2 << '\n';
    std::cout << "7 / 2.0 = " << 7 / 2.0 << '\n';

    std::uint8_t sayac = 250;
    sayac += 10;
    std::cout << "uint8_t: " << static_cast<int>(sayac) << '\n';

    std::string kart = "STM32";
    auto uzunluk = kart.size();
    std::cout << kart << " (" << uzunluk << " karakter)\n";
    return 0;
}
ADC: 512 -> 1.652 V
7 / 2   = 3
7 / 2.0 = 3.500
uint8_t: 4
STM32 (5 karakter)

Bu çıktıdan öğrendiklerimiz

const

const ile tanımlanan değer değiştirilemez. Referans gerilimi gibi sabitleri const yapmak hem yanlışlıkla değiştirmeyi önler hem de niyetini belli eder.

Tam sayı bölmesi

7 / 2 sonucu 3'tür, çünkü iki taraf da int olduğunda sonuç da int olur ve kesir atılır. En az bir taraf double ise (örn. 7 / 2.0) sonuç 3.5 çıkar. Ortalama hesaplarken en sık yapılan hata budur.

Taşma (overflow)

std::uint8_t en fazla 255 tutar. 250'ye 10 eklediğimizde sonuç 260 olurdu ama bu tipte 256'ya göre mod alınır ve 4 kalır. İşaretsiz tiplerde bu "sarma" tanımlıdır; işaretli int taşması ise tanımsız davranıştır ve çok tehlikelidir.

auto

auto derleyiciye "tipi sağ taraftan çıkar" der. kart.size() bir std::size_t döndürür; tipin adını ezberlemene gerek kalmaz. Yine de tip önemliyse açıkça yazmak okunurluğu artırır.

Yerel değişkenler kendiliğinden sıfırlanmaz. int x; yazıp doğrudan okursan içinde çöp değer bulursun. Her zaman bir başlangıç değeri ver: int x = 0; ya da int x{0};.

Süslü parantezle ilk değer verirken (int n{3.7};) derleyici ondalık kısmın kaybolacağını fark eder ve hata verir. Bu sayede sessiz veri kayıpları engellenir.

Kendin dene

  1. 12 bitlik bir ADC için (maksimum 4095) okuma değeri 2048 ve referans 5 V olsun; gerilimi hesaplayıp yazdır.
  2. İki int değişkenin ortalamasını hesapla. Önce yanlış (tam sayı bölmesiyle), sonra doğru yolla.
  3. std::uint8_t değişkenine 255 ata, bir ekle ve sonucu yazdır.

// Mini sınav

Bir seçeneğe tıkla; doğru mu yanlış mı, anında ve nedeniyle birlikte göreceksin.

1. 7 / 2 ifadesinde iki sayı da int olduğunda sonuç nedir?
2. std::uint8_t tipindeki bir değişkene 250 atayıp 10 eklersek sonuç ne olur?
3. Bir değişkeni const olarak tanımlamanın amacı nedir?

Bitirdiğinde işaretle: ilerlemen kaydolur, +20 XP kazanırsın.

İpucu: ← → tuşlarıyla dersler arasında gezinebilirsin.