Kayıtlar

Temmuz, 2022 tarihine ait yayınlar gösteriliyor

C++ Dersleri | Bit İşlemleri | Bitwise XOR, Özel Veya Operatörü

Resim
 C++ bitwise Xor (exclusive or operator) operatörü ^ , diğer bit operatörleri gibi dijital elektronik xor yapısıyla aynıdır. Doğruluk tablosunu yine görselde paylaşalım : kodlarken de aynı değişkenleri kullanalım: int   main () { int   a   =   7 ; //0111 int   b   =   13 ; //1101 int   aXORb   =   a   ^   b ;           //1010 cout   <<   " a=  "   <<   a   <<   " , b= "   <<   b   <<   " , a^b= "   <<   aXORb ; } çıktımız :  a= 7, b=13, a^b=10 10 elde ettik, binary formatındaki sayıları alt alta yazarak soldan sağa doğru sütunları XOR işlemine tabi tutuyoruz en solda: 0 ^ 1 den 1 geldi, bir sonrakinden 1 ^ 1 den 0 geldi, bir sonrakinden : 1 ^ 0 dan 1 geldi, bir sonrakinden  1 ^ 1 den 0 geldi. Benim xor anlatırken akılda kalması için anlattığım bir hikaye var, patron sekreterine bana yalnızca bir kişi çağır demiştir. Kimse gelmezse patron bu işi sevmez. Ahmet gelirse patron için tamamdır, Me

C++ Dersleri | Bit İşlemleri | Bitwise OR

Resim
 C++ bitwise OR operatörü dijital elektronikten bildiğimiz VEYA ile aynı şeydir, doğruluk tablosunu hatırlamayanlar için bir görsel ekleyelim : kodlarken de aynı değişken isimlerini kullanalım : int   main () {      int   a   =   7 ;            // 0111      int   b   =   13 ;           // 1101      int   aORb   =   a   |   b ;     // 1111      cout   <<   " a =  "   <<   a   <<   " , b=  "   <<   b   <<   " , a | b =  "   <<   aORb   <<   endl ; } çıktımız :   a = 7, b= 13, a | b = 15  Peki neler oldu nasıl 15 elde ettik, binary formatındaki sayıları alt alta yazarak soldan sağa doğru sutunları OR işlemine tabi tutuyoruz : en soldan yukarda 0 aşağıda 1 sonuç 1, bir sonrakinde yukarda 1 aşağıda 1, sonuç 1, bir sonrakinde, yukarda 1 aşağıda 0, sonuç 1, en sonda da yukarda 1 aşağıda 1, den sonuç 1 gelmiş oldu. Hatırlatmış olayım : bu operatör bir değişkene eşitlenmediği sürece bir değişikliğe yol açmaz

C++ Dersleri | Bit İşlemleri - Bitwise Operators

     C++ Bit işlemleri mikrodenetleyici programlarken çokça ihtiyaç duyacağımız önemli bir konudur. C++ 'ı özellikle gömülü sistemler geliştirmek için öğrenmek ve kullanmak istiyorsanız naçizane tavsiyem bu konu üzerinde ağırlık vermeniz olacaktır. Bunun sebebi mikro denetleyicilerin kontrolünün register kullanarak yapılabilmesidir. Buna hiç gerek duymadığımız Arduino gibi sistemler ya da STM için konuşacak olursak HAL kütüphaneleri gibi register kullanımından soyutlandırılmış yapılar, ancak hobiciler için performans/hafıza optimizasyonuna ihtiyaç duymayan uygulamalarda kullanılabilir. Temel yapı register kullanımıdır ve buna hakim olan programcılar için kullandıkları mikrodenetleyici her ne olursa olsun, ihtiyaç duyacakları tek şey: mikrodenetleyicinin veri sayfası olacaktır. Ben arduino biliyorum diyen biri STM programlamak istediğinde HAL öğrenmelidir, ancak register level kodlayabilme yeteneğine sahipse buna gerek duymayacak ve geçişlerde herhangi bir zorluk yaşamayacaktır. Mik

C++ Floating Point Aritmetik

Resim
 C++ 'ın ondalık sayılardaki davranışını, pardon garip davranışını inceliyoruz. Biraz bildiğiniz ve anlamlandırabileceğiniz aritmetiğin dışına çıkmış olacağız. Bakalım neler var; bir for döngümüz olsun, 0 dan başlasın ve 2 ye eşit olmadığı sürece dönmeye devam etsin, adımlarımızda 0.01f olsun, beklentimiz ne olurdu bu durumda 0, 0.01, 0.02 ... şeklinde devam ederek 1.98, 1.99 ve son olarak 2.0 olur ve döngümüz sonlanır diye hayal ediyoruz, ancak beklenmedik şekilde döngümüz asla sonlanmıyor 😱   kodumuz şöyle isteyen deneyebilir : float   total   =   0 ; for   ( float   a   =   0 ;   a   !=   2 ;   a   +=   0.01f )   { total   +=   a ; } net bir ifade olan a != 2 dediğimiz yeri biraz daha yumuşatalım ve  a < 2; yapalım, bu durumda a 2 den illaki büyük olacak ve döngü sonlanacak, sonlanacak sonlanmasına da burda da bir sürpriz bekliyor bizi, total değişkeni 199 değil 201 olacak, bu olan bilgisayarlar işlemciler için IEEE754-Compliant standard yayınlamıştır. Bunun olmasının s

C++ Aritmetik Operatörler ve öncelikleri

     C++ 'da aritmetik operatörler öncelik sıralaması matematikteki gibidir. Çarpma ve bölme toplama ve çıkarmaya göre daha yüksek önceliklidir, işlemler her yerde olduğu gibi burada da soldan sağa doğru yapılır. Öncelikli yapmak istediğimiz işlemleri paranteze alarak öncelik sıralamasında yukarı taşımak mümkündür, dediğimiz gibi matematikte nasılsa C++ da da öyledir.     Örneklendirelim : // bir küresel kabuğun hacmini hesaplamak için dıştan hesaplanan hacimden // içten hesaplanan hacim çıkartılır double   R   =   13 ; double   r   =   11 ; double   pi   =   3.1415f ; double   vol   =   4.0   *   pi   *   R   *   R   *   R   /   3.0   -   4.0   *   pi   *   r   *   r   *   r   /   3.0 ; sırasıyla, dış kürenin hacmini hesaplayacak, sonra iç kürenin hacmini hesaplayacak, sonrasında sonuçları birbirinden çıkartacak. Sonuç : 3627.39  toplama için :  int   x   =   4   +   4   /   2 ;   // 6 döner int   y   =   ( 5   +   5 )   /   2 ;   // 5 döner çarpım için : int   x   =  

C++ Unary Operatörler

     C++ Unary operatörler , tek operandları olmaları sebebiyle bu ismi almışlardır diye düşünüyorum, zira unary : tekli olarak dilimize dönüyor. Bu arkadaşlar yüksek önceliğe sahiptirler. Basit bir konu olmakla beraber dikkat edilmesi gereken hususları yok değil. Postfix ve prefix olarak kullanımları mevcut, ikisinin arasındaki farksa prefix olduklarında önce operasyon gerçekleşiyor sonra aksiyon gerçekleşiyor, postfix olduklarında önce aksiyon sonra operasyon gerçekleşiyor, ne demeye çalışıyorum bir örnekle bakalım; örneğimizde increment operatorumuz olan ++ operatorunu ya da decrement operatorumuz olan -- ' yi kullanabiliriz:  int   i   =   0 ; cout   <<   i ++   <<   endl ; cout console içine verdiğimiz herneyse yazdırır söylemiş olalım, burada operasyondan kasıt i değerinin mevcut değerine 1 eklenmesi, aksiyondan kasıt da bu değerin konsol ekranına yazdırılmasıdır. Postfixden kasıt ++ operatörünün değişkenden sonra yazılması, prefix 'den kasıt ++i şeklinde değ

C++ Mantıksal AND ve Mantıksal OR Operatörlerinde Öncelik

  Mantıksal AND && operatörünün mantıksal OR || operatörüne göre önceliği vardır. Mantıksal demişken C++, bu operatörler için gerçekten mantıklı davranır, yazının devamında bu dediğime hak vereceksiniz. Şöyle ki; bu iki operatörün de iki operandı vardır bunlara A ve B dersek şimdilik, A ve B durumlarının && operatörü için her ikisinin de DOĞRU olması gerekir. Yani ( A && B ) ifadesinin doğru çıktı üretebilmesi hem A 'nın hem B 'nin DOĞRU olmasıyla oluşur. C++ bu operandların kontrollerini soldan başlayarak yapar, önce A durumunu kontrol eder, eğer A doğru ise B yi denetler , burası önemli, demek ki A doğru değilse B 'yi denetlemek için enerji ve zaman sarf etmez. Bu da performansımızı doğrudan etkileyen bir durumdur. Bu durumu lehimize kullanmak gerekirse A ve B 'nin yeri önemli olmaya başlar , ne demeye çalışıyorum, (A && B) ile (B && A) aynı performansla çalışmayabilir. Burada önsezilerinizde hangi durumun FALSE üretme olasıl

Arduino ile voltaj okuma | Arduino ile voltmetre | Arduino ADC örnek Kod

Resim
       Arduino güç özellikleri konusunda detaylıca anlattığımız üzere, Arduino UNO için konuşuyorsak; mikro denetleyicimizin anlamlandırabildiği maksimum potansiyel fark +5V 'tur. Bunun konumuzu ilgilendiren kısmı da standart olarak bir Arduino UNO ile ölçebileceğimiz en fazla potansiyel farkın 5V olmasıdır. Daha yüksek seviyelerdeki voltajların Arduino ile ölçülebilmesi için ek elemanlara ve devrelere ihtiyaç duyulmaktadır, ileride bu konuyla ilgili yazı yayınlarsam linkini buralarda paylaşıyor olurum. Bu yazı Arduino UNO ile daha önce hiç voltaj ölçmemiş, nasıl ölçüldüğü konusunda fikri olmayan okuyucularımızı hedef almaktadır :)      Devre şemamız görseldeki gibi, biraz anlatmamız gerekirse, potansiyometremizin dış uçlarından birini 5V pinine diğerini de GND pinine bağlıyoruz, yerleri farkeder mi? aslına bakarsanız hiç farketmez, peki ne gibi bir değişikliğe sebep olur? şöyle : şekilde gördüğünüz potansiyometrenin kadranı Kırmızıya yakın bu durumda orta pinden çıkan voltaj 5v

Arduino buton ile led yakmak | Örnek kod

Resim
  Arduino button ile led yakma uygulaması na geçmeden önce buton nedir kısaca ona bakalım. Buton iki veya bazen ikişerli ortak olmak üzere 4 adet terminalden oluşan anahtarlama elemanıdır diyebiliriz. Anahtarlama elemanı olması sebebiyle elektrik devresine seri olarak bağlanırlar. yani devreyi herhangi bir yerinden keserler, butona basıldığı anda terminaller fiziksel olarak temas eder ve devre buton üzerinden tamamlanmış olur. Yukarıdaki animasyona bakıldığında çalışma prensibini anlamak gayet basittir. Söz konusu animasyon Sparkfun 'un web sitesinden alınmıştır.      Sayfanın girişinde yer alan Arduino buton ve led bağlantısı nın gösterildiği görselden biraz bahsedelim. Arduino 'nun 13 üncü pinine bir ader direnç üzerinden ( Buradaki direncin nasıl hesaplandığını öğrenmek için lütfen tıklayınız ) ledin anod (+) ucu bağlanmıştır. Ledin diğer ucu (katot) da Arduino 'nun GND pinine bağlanmıştır. Butona gelince, görsele göre konuşmak gerekirse solda kalan terminaller b

C++ Operatör Öncelikleri

 C++ siz bir ifadeyi yazdığınızda bunu nasıl değerlendirir, hangi işlemi önce yapar ve bunu nasıl anlayabiliriz örnekleriyle beraber konu içerisinde bakıyor olacağız. Sonraki Konu :  C++ Mantıksal AND ve Mantıksal OR Operatörleri Önceki Konu : C++ nullptr nedir nasıl kullanılır  

C++ nullptr Nedir? Nasıl kullanılır?

  nullptr , adından da tahmin edilebileceği üzerine henüz hiçbirşeyi göstermeyen bir göstericiye astanabilecek bir literaldir. this konusunda verdiğimiz örnekle gidecek olursak orada class 'a ait bir instance oluşturmuş ve söz konusu instance 'ı işaret etmesi için bir de pointer oluşturmuştuk ancak oluşutururken hiçbirşeye eşitlememiş/eşitleyememiştik. DCEngine Engine ; DCEngine * enginePtr ; yoğurdu doğru yemek gerekirse burda pointer için bir boş gösterici atamak gerekiyor ki kullanırken, göstericinin gerçekten bizim erişmek istediğimiz instance 'ı gösterip göstermediğinden emin olabilelim, söz konusu satır şöyle olsaydı : DCEngine * enginePtr = nullptr ; erişmeye çalıştığımız anda instance 'ı göstermeye başlamış mıdır ki diye kontrol etmek için: if ( enginePtr != nullptr )     {             // Instance ı güvenle kullanabiliriz     } aksi halde henüz işleyici instance'ın pointer 'a atandığı satıra gelmeden erişmeye çalışıyor olabiliriz. Basitçe hiçbirşey

C++ true false nedir nasıl kullanılır

  bool tipindeki değişkenin değeridir diye tanımlayabiliriz, true false 'ı. Türkçeye çevirildiğinde kolayca işlevi anlaşılabilir, if / while gibi kontrol mekanizmalarında kullanılır ve doğru yanlış olarak ifade edebildiğimiz veri tipi olan bool 'un değerlendirilmesinde/değer verilmesi anlamında :) ya da değerinin okunmasında kullanılırlar.   bool isReady = true ;     if (isReady)     {         // falan filan     } isReady true ise bloğu işlet demek ister isReady == true da kullanılabilir.     bool isReady = true ;     if (!isReady)     {         // falan filan     } derken isReady == false kontrolü yapmış oluruz, yani yukarıdaki if durum kontrolü tam olarak aşağıdaki ile aynıdır: if (isReady == false )     {         // falan filan     } Önceki Konu :  C++ Integer Literal | Tam sayı hazır bilgileri Sonraki Konu :  C++ nullptr nedir nasıl kullanılır

C++ Integer Literal | Tam sayı hazır bilgileri

Tam sayılar için bildirim ifadeleridir diyebiliriz.  Decimal Literal Hiçbirşeyi olmayan literal :) bizim de kullandığımız sayı sistemi olan 10 luk sisteme ait olandır, 10luk sistemi kullanırken bir literal 'e ihtiyaç yoktur aslında, nasıl yani? 21 sayısını ifade edeceksek sadece 21 yazarız : int x = 21 ; ifadesinde 21 ile birlikte ne önüne ne arkasına hiçbirşey yazmayız , ne demek 21 yazarken önüne ne yazabiliriz ki? dikkat etmeniz gereken nokta başına 0 kullanmıyor olduğumuzdur, aslında 21 ile 021 bize göre aynı şeyken C++ için aynı şey değildir! Kural basit (1-9) ile başlayabilir (0-9) ile devam edebilirsin. Bu duruma decimal literal denir.  Octal Literal Octal-sekizlik- sistemde 21 sayısını ifade etmemiz gerekirse :  int x = 025 ; yazmamız gerekir, bu noktada yukarda neden başına sıfır yazamıyoruz anlaşılmıştır. Kuralımız : 0 ile başlıyoruz, 1-7 arasındaki sayılarla devam ediyoruz, devamı varsa 0 da kullanıyoruz elbette, sonuç olarak değerin 8 lik sayı sistemine göre ifade

C++ Literals

 C++ Literals böylece Türkçe' ye çevirmeye çalışmadan anlaşılması gereken bir konudur bana göre. Basitçe değişken olmayan bir değerin tipini belirtmek için kullanılır diyebilir miyiz bilemedim, kullandığınız zaman algılamanız daha kolay olacaktır onu söyleyebilirim. Nasıl diyelim, türü ve değeri yazılışından belli olan ifade türüdür demek yanlış olmaz sanırım. Hafıza yönetiminde önemli ve dikkat edilmesi gereken bir konudur, ve zaman zaman söylediğimiz gibi kullanmasak da ne olduğunu mutlaka bilmemiz gereken şeylerden biridir, ne diyoruz? her zaman kod yazmayız bazen de bir başkasının yazdığı kodu anlamamız gerekir/beklenir. Konu bir bölüm başlığı olup ilerleyen sayfalarda detaylıca incelenecektir. Ancak burada da kısaca bahsetmek gerekirse bir sabit için bir literaldir diyebiliriz : mesela 15 bir literaldir, x bir değişken ancak bellek tarafından olaya bakacak olursak, 15 ile x 'in bir tipi ve değeri vardır ve değişken olmasalar da bellek de yer alırlar, bellekte nasıl sakla

C++ this nedir ne işe yarar | C++ this keyword kullanımı

  this keyword -anahtar kelimesi, aynen ingilizcede olduğu gibi bu anlamına gelir ve mevcut nesne instance 'ını işaret eder, işaret eder ibaresinden, arkadaşın bir pointer olduğunu anlayabiliriz. Pointer konusunu ileride yazıyor oluruz, çok kafaya takılacak bir durumu yoktur, kendisi de bir değişken olup işaret ettiği değişken ya da nesnenin bellek adresini tutar sadece. Ne diyorum, nedir "nesne" nin instance 'ı, bunu bilmek ne işimize yarayacak ya da nasıl kullanacağız bakalım. Bir class 'ım var, sistemimdeki motoru sürdüğüm ve ona bağlı değişkenleri parametreleri fonksiyonları/işlevleri barındırdığım. Motora sistemin bir çok modülünden erişmem ve yönetmem ya da parametrelerini okuyup değiştirmem gerekiyor. Bu class 'ımı da bir cpp dosyasında barındırıyorum, bir de header dosyam var.  Header dosyam şu şekilde olsun: #ifndef _ENGINE_H_ #define _ENGINE_H_ #include "enums.h" class DCEngine { public:     DCEngine ();     void Start ( DirectionO