{"id":39477,"date":"2026-02-22T11:01:16","date_gmt":"2026-02-22T08:01:16","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/"},"modified":"2026-02-22T11:01:16","modified_gmt":"2026-02-22T08:01:16","slug":"c-cta-set-bitleri-sayma-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/","title":{"rendered":"C\/C++&#8217;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<h2>C\/C++&#8217;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>\n    Bilgisayar bilimlerinde ve d\u00fc\u015f\u00fck seviyeli programlamada, bir say\u0131n\u0131n ikili (binary) g\u00f6sterimindeki &#8220;set&#8221; (yani 1 de\u011feri ta\u015f\u0131yan) bit say\u0131s\u0131n\u0131 bulmak olduk\u00e7a yayg\u0131n ve \u00f6nemli bir i\u015flemdir. Bu i\u015flem, &#8220;popcount&#8221; (population count) veya &#8220;Hamming a\u011f\u0131rl\u0131\u011f\u0131&#8221; olarak da bilinir. Veri s\u0131k\u0131\u015ft\u0131rmadan kriptografiye, hata tespit kodlar\u0131ndan donan\u0131m optimizasyonlar\u0131na kadar bir\u00e7ok alanda kritik rol oynayan bu hesaplama, performansa duyarl\u0131 uygulamalar i\u00e7in farkl\u0131 algoritmalar ve teknikler geli\u015ftirilmesine yol a\u00e7m\u0131\u015ft\u0131r. Bu makalede, C\/C++ dilinde set bitleri saymak i\u00e7in kullanabilece\u011finiz \u00e7e\u015fitli y\u00f6ntemleri, bunlar\u0131n arkas\u0131ndaki mant\u0131\u011f\u0131, kod \u00f6rneklerini ve performans kar\u015f\u0131la\u015ft\u0131rmalar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.\n<\/p>\n<h2>1. Bit Sayman\u0131n Temelleri: D\u00f6ng\u00fc ve Kayd\u0131rma<\/h2>\n<p>\n    Bir say\u0131n\u0131n ikili temsilindeki set bitleri sayman\u0131n en temel ve anla\u015f\u0131lmas\u0131 en kolay yolu, say\u0131n\u0131n her bir bitini tek tek kontrol etmek ve 1 olanlar\u0131 saymakt\u0131r. Bu y\u00f6ntem, bir d\u00f6ng\u00fc ve bit kayd\u0131rma (bit shifting) operat\u00f6rleri kullan\u0131larak uygulan\u0131r.\n<\/p>\n<h3>1.1. En Basit Y\u00f6ntem: Bit Kontrol\u00fc<\/h3>\n<p>\n    Bu yakla\u015f\u0131mda, say\u0131n\u0131n en sa\u011fdaki bitinden ba\u015flayarak her bit kontrol edilir. E\u011fer bit 1 ise, sayac\u0131m\u0131z art\u0131r\u0131l\u0131r. Daha sonra say\u0131 sa\u011fa do\u011fru bir bit kayd\u0131r\u0131l\u0131r (<code>>>= 1<\/code>) ve bu i\u015flem say\u0131 s\u0131f\u0131r olana kadar devam eder.\n<\/p>\n<h3>1.2. Mant\u0131\u011f\u0131 ve \u0130\u015fleyi\u015fi<\/h3>\n<p>\n    Bir say\u0131y\u0131 1 ile bitwise AND (<code>&<\/code>) i\u015flemine tabi tutmak, o say\u0131n\u0131n en sa\u011fdaki (least significant) bitinin de\u011ferini verir. E\u011fer sonu\u00e7 1 ise, o bit set edilmi\u015f demektir. Say\u0131y\u0131 sa\u011fa kayd\u0131rmak ise bir sonraki bitin en sa\u011fa gelmesini sa\u011flar.\n<\/p>\n<h3>1.3. Kod \u00d6rne\u011fi<\/h3>\n<pre><code class=\"language-cpp\">\nint countSetBitsSimple(unsigned int n) {\n    int count = 0;\n    while (n > 0) {\n        count += (n & 1); \/\/ En sa\u011fdaki biti kontrol et\n        n >>= 1;          \/\/ Say\u0131y\u0131 bir bit sa\u011fa kayd\u0131r\n    }\n    return count;\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>1.4. Performans Analizi<\/h3>\n<p>\n    Bu y\u00f6ntem, say\u0131n\u0131n bit geni\u015fli\u011fi (\u00f6rne\u011fin 32-bit veya 64-bit) kadar d\u00f6ng\u00fc iterasyonu gerektirir. Her iterasyonda bir AND i\u015flemi, bir toplama ve bir sa\u011fa kayd\u0131rma i\u015flemi yap\u0131l\u0131r. Basit olmas\u0131na ra\u011fmen, \u00f6zellikle b\u00fcy\u00fck say\u0131lar veya \u00e7ok s\u0131k yap\u0131lan \u00e7a\u011fr\u0131lar i\u00e7in performans a\u00e7\u0131s\u0131ndan en verimli y\u00f6ntem de\u011fildir. Karma\u015f\u0131kl\u0131\u011f\u0131 O(log n) veya daha do\u011fru bir ifadeyle O(bit_geni\u015fli\u011fi)'dir.\n<\/p>\n<h2>2. Brian Kernighan'\u0131n Algoritmas\u0131<\/h2>\n<p>\n    Brian Kernighan'\u0131n algoritmas\u0131, set bitleri saymak i\u00e7in daha ak\u0131ll\u0131 ve genellikle daha h\u0131zl\u0131 bir yakla\u015f\u0131md\u0131r. Bu algoritma, yaln\u0131zca set edilmi\u015f bit say\u0131s\u0131 kadar d\u00f6ng\u00fc iterasyonu yapar.\n<\/p>\n<h3>2.1. Algoritman\u0131n Prensibi<\/h3>\n<p>\n    Bu algoritman\u0131n temel prensibi \u015fudur: Bir say\u0131dan 1 \u00e7\u0131kar\u0131ld\u0131\u011f\u0131nda (<code>n - 1<\/code>), en sa\u011fdaki set bit (yani 1 olan bit) ve onun sa\u011f\u0131ndaki t\u00fcm s\u0131f\u0131r bitler tersine d\u00f6ner. \u00d6rne\u011fin, <code>n = 12 (1100)<\/code> ise, <code>n - 1 = 11 (1011)<\/code> olur. Bu durumda <code>n & (n - 1)<\/code> i\u015flemi, en sa\u011fdaki set biti s\u0131f\u0131rlar. <code>1100 & 1011 = 1000 (8)<\/code>.\n<\/p>\n<h3>2.2. Neden Daha H\u0131zl\u0131?<\/h3>\n<p>\n    Yukar\u0131daki basit d\u00f6ng\u00fc y\u00f6ntemi her zaman say\u0131n\u0131n bit geni\u015fli\u011fi kadar iterasyon yaparken, Kernighan algoritmas\u0131 sadece set bit say\u0131s\u0131 kadar iterasyon yapar. E\u011fer bir say\u0131da az say\u0131da set bit varsa, bu y\u00f6ntem \u00e7ok daha h\u0131zl\u0131 olacakt\u0131r. \u00d6rne\u011fin, 32-bit bir say\u0131da sadece 2 set bit varsa, Kernighan algoritmas\u0131 2 iterasyonda tamamlan\u0131r, oysa basit y\u00f6ntem 32 iterasyon yapar.\n<\/p>\n<h3>2.3. Kod \u00d6rne\u011fi<\/h3>\n<pre><code class=\"language-cpp\">\nint countSetBitsKernighan(unsigned int n) {\n    int count = 0;\n    while (n > 0) {\n        n &= (n - 1); \/\/ En sa\u011fdaki set biti s\u0131f\u0131rla\n        count++;\n    }\n    return count;\n}\n<\/pre>\n<p><\/code><\/p>\n<h3>2.4. Performans Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/h3>\n<p>\n    Kernighan algoritmas\u0131, set bitlerin seyrek oldu\u011fu durumlarda (sparse numbers) basit d\u00f6ng\u00fcden \u00f6nemli \u00f6l\u00e7\u00fcde daha iyi performans g\u00f6sterir. En k\u00f6t\u00fc durumda (t\u00fcm bitlerin set oldu\u011fu durumda) ise basit d\u00f6ng\u00fc ile benzer say\u0131da iterasyon yapar. Genellikle pratik uygulamalarda tercih edilen bir y\u00f6ntemdir. Karma\u015f\u0131kl\u0131\u011f\u0131 O(k)'dir, burada k set bit say\u0131s\u0131d\u0131r.\n<\/p>\n<h2>3. H\u0131zl\u0131 \u00c7\u00f6z\u00fcmler: Look-up Tablolar\u0131 ve B\u00f6l-Y\u00f6net Yakla\u015f\u0131m\u0131<\/h2>\n<p>\n    Daha y\u00fcksek performans gerektiren senaryolar i\u00e7in, \u00f6nceden hesaplama veya paralel i\u015fleme teknikleri kullan\u0131labilir.\n<\/p>\n<h3>3.1. Look-up Tablosu Kullan\u0131m\u0131<\/h3>\n<p>\n    Bu y\u00f6ntem, k\u00fc\u00e7\u00fck boyutlu say\u0131lar i\u00e7in set bit say\u0131s\u0131n\u0131 \u00f6nceden hesaplay\u0131p bir dizide (tabloda) saklamaya dayan\u0131r. Daha b\u00fcy\u00fck say\u0131lar i\u00e7in ise, say\u0131 baytlara veya daha k\u00fc\u00e7\u00fck par\u00e7alara ayr\u0131l\u0131r ve her par\u00e7an\u0131n set bit say\u0131s\u0131 tablodan okunarak toplan\u0131r.\n<\/p>\n<h4>3.1.1. Tablo Olu\u015fturma ve Mant\u0131k<\/h4>\n<p>\n    \u00d6rne\u011fin, 8-bitlik say\u0131lar i\u00e7in (0-255 aras\u0131) set bit say\u0131lar\u0131n\u0131 i\u00e7eren bir tablo olu\u015fturabiliriz.\n<\/p>\n<pre><code class=\"language-cpp\">\n\/\/ 8-bitlik say\u0131lar i\u00e7in look-up tablosu\nunsigned char BitsSetTable256[256];\n\nvoid initializeBitsSetTable() {\n    BitsSetTable256[0] = 0;\n    for (int i = 0; i < 256; i++) {\n        BitsSetTable256[i] = (i &#038; 1) + BitsSetTable256[i \/ 2];\n        \/\/ Veya Kernighan algoritmas\u0131 ile:\n        \/\/ BitsSetTable256[i] = countSetBitsKernighan(i);\n    }\n}\n\nint countSetBitsLookup(unsigned int n) {\n    \/\/ Tablonun initialize edildi\u011finden emin olun\n    \/\/ initializeBitsSetTable(); \/\/ Bir kere \u00e7a\u011fr\u0131lmal\u0131\n\n    int count = 0;\n    count += BitsSetTable256[n &#038; 0xff];         \/\/ \u0130lk 8 bit\n    count += BitsSetTable256[(n >> 8) & 0xff];  \/\/ Sonraki 8 bit\n    count += BitsSetTable256[(n >> 16) & 0xff]; \/\/ Sonraki 8 bit\n    count += BitsSetTable256[(n >> 24) & 0xff]; \/\/ Son 8 bit\n    return count;\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>3.1.2. Bellek ve H\u0131z Dengesi<\/h4>\n<p>\n    Look-up tablosu, \u00f6zellikle s\u0131k s\u0131k \u00e7a\u011fr\u0131lan ve ayn\u0131 zamanda \u00e7ok \u00e7e\u015fitli bit desenlerine sahip say\u0131lar i\u00e7in \u00e7ok h\u0131zl\u0131 bir \u00e7\u00f6z\u00fcm sunar. Tablonun bir kez olu\u015fturulmas\u0131 gerekir ve sonras\u0131nda her \u00e7a\u011fr\u0131 sabit s\u00fcrede (O(1)) tamamlan\u0131r (say\u0131n\u0131n bayt say\u0131s\u0131 kadar tablo okuma). Ancak, tablo bellekte yer kaplar (256 bayt 8-bit i\u00e7in). Daha b\u00fcy\u00fck par\u00e7alar (\u00f6rne\u011fin 16-bit) i\u00e7in tablo boyutu katlanarak artar (65536 eleman).\n<\/p>\n<h3>3.2. B\u00f6l ve Y\u00f6net (Divide and Conquer) Yakla\u015f\u0131m\u0131<\/h3>\n<p>\n    Bu y\u00f6ntem, say\u0131n\u0131n bitlerini gruplara ay\u0131rarak ve her grubun set bitlerini paralel olarak hesaplayarak \u00e7al\u0131\u015f\u0131r. Genellikle \"parallel bit counting\" olarak bilinir ve donan\u0131m mimarilerinden ilham al\u0131r.\n<\/p>\n<h4>3.2.1. Paralel Bit Sayma Prensibi<\/h4>\n<p>\n    Bu algoritma, say\u0131n\u0131n bitlerini ikili a\u011fa\u00e7 yap\u0131s\u0131 gibi gruplayarak toplar. \u00d6rne\u011fin, her 2 bitlik grubun set bitlerini toplar, sonra her 4 bitlik grubun set bitlerini toplar ve bu b\u00f6yle devam eder.\n<\/p>\n<h4>3.2.2. Ad\u0131m Ad\u0131m A\u00e7\u0131klama (32-bit i\u00e7in)<\/h4>\n<ol>\n<li>Her 2 bitlik grubun set bitlerini hesapla: <code>(n & 0x55555555) + ((n >> 1) & 0x55555555)<\/code><\/li>\n<li>Her 4 bitlik grubun set bitlerini hesapla: <code>(n & 0x33333333) + ((n >> 2) & 0x33333333)<\/code><\/li>\n<li>Her 8 bitlik grubun set bitlerini hesapla: <code>(n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F)<\/code><\/li>\n<li>Her 16 bitlik grubun set bitlerini hesapla: <code>(n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF)<\/code><\/li>\n<li>Son olarak 32 bitlik grubun set bitlerini hesapla: <code>(n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF)<\/code><\/li>\n<\/ol>\n<p>\n    Bu i\u015flemler asl\u0131nda say\u0131n\u0131n kendisi \u00fczerinde yap\u0131l\u0131r ve her ad\u0131mda say\u0131n\u0131n her bir bit grubu kendi i\u00e7inde set bit say\u0131s\u0131n\u0131 bar\u0131nd\u0131racak \u015fekilde g\u00fcncellenir.\n<\/p>\n<h4>3.2.3. Kod \u00d6rne\u011fi (32-bit)<\/h4>\n<pre><code class=\"language-cpp\">\nint countSetBitsDivideAndConquer(unsigned int n) {\n    n = (n & 0x55555555) + ((n >> 1) & 0x55555555); \/\/ Her 2 bitlik grubun toplam\u0131\n    n = (n & 0x33333333) + ((n >> 2) & 0x33333333); \/\/ Her 4 bitlik grubun toplam\u0131\n    n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F); \/\/ Her 8 bitlik grubun toplam\u0131\n    n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF); \/\/ Her 16 bitlik grubun toplam\u0131\n    n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF); \/\/ Her 32 bitlik grubun toplam\u0131\n    return n;\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>3.2.4. Performans ve Karma\u015f\u0131kl\u0131k<\/h4>\n<p>\n    Bu y\u00f6ntem, sabit say\u0131da (log2(bit_geni\u015fli\u011fi)) i\u015flem yaparak set bitleri sayar. Bu nedenle, bit geni\u015fli\u011fi ne olursa olsun (32-bit, 64-bit), sabit say\u0131da i\u015flemle \u00e7al\u0131\u015f\u0131r ve \u00e7ok h\u0131zl\u0131d\u0131r. \u00d6zellikle derleyici optimizasyonlar\u0131 ve modern i\u015flemcilerin paralel i\u015flem yetenekleri sayesinde olduk\u00e7a verimlidir. Karma\u015f\u0131kl\u0131\u011f\u0131 O(log(bit_geni\u015fli\u011fi))'dir.\n<\/p>\n<h2>4. Derleyici ve Donan\u0131m Deste\u011fi: En H\u0131zl\u0131 Y\u00f6ntemler<\/h2>\n<p>\n    Modern derleyiciler ve i\u015flemciler, set bit sayma i\u015flemini do\u011frudan destekleyen \u00f6zel talimatlar sunar. Bu, genellikle en h\u0131zl\u0131 y\u00f6ntemdir.\n<\/p>\n<h3>4.1. Derleyici Dahili Fonksiyonlar\u0131 (Built-in Functions)<\/h3>\n<p>\n    \u00c7o\u011fu modern C\/C++ derleyicisi, popcount i\u015flemi i\u00e7in dahili (built-in) fonksiyonlar sa\u011flar. Bu fonksiyonlar, derleyicinin hedef i\u015flemcinin \u00f6zel donan\u0131m talimatlar\u0131n\u0131 kullanmas\u0131na olanak tan\u0131r.\n<\/p>\n<h4>4.1.1. GCC\/Clang i\u00e7in <code>__builtin_popcount<\/code><\/h4>\n<p>\n    GNU Compiler Collection (GCC) ve Clang derleyicileri, \u00e7e\u015fitli boyutlardaki tamsay\u0131lar i\u00e7in <code>__builtin_popcount<\/code> fonksiyonunu sunar.\n<\/p>\n<ul>\n<li><code>__builtin_popcount(unsigned int)<\/code><\/li>\n<li><code>__builtin_popcountl(unsigned long)<\/code><\/li>\n<li><code>__builtin_popcountll(unsigned long long)<\/code><\/li>\n<\/ul>\n<pre><code class=\"language-cpp\">\n#include <iostream> \/\/ Sadece \u00f6rnek i\u00e7in\n\nint countSetBitsGCC(unsigned int n) {\n    return __builtin_popcount(n);\n}\n\nlong long countSetBitsGCC_LL(unsigned long long n) {\n    return __builtin_popcountll(n);\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>4.1.2. MSVC i\u00e7in <code>__popcnt<\/code><\/h4>\n<p>\n    Microsoft Visual C++ (MSVC) derleyicisi, Intel'in SSE4.2 talimat setinde bulunan <code>POPCNT<\/code> komutunu do\u011frudan \u00e7a\u011f\u0131ran <code>_mm_popcnt_u32<\/code> (veya <code>__popcnt<\/code>) gibi intrinsics fonksiyonlar sa\u011flar.\n<\/p>\n<pre><code class=\"language-cpp\">\n#ifdef _MSC_VER\n#include <intrin.h> \/\/ _mm_popcnt_u32 i\u00e7in\n\nint countSetBitsMSVC(unsigned int n) {\n    return __popcnt(n); \/\/ Veya _mm_popcnt_u32(n);\n}\n#endif\n<\/pre>\n<p><\/code><\/p>\n<h4>4.1.3. Kullan\u0131m ve Avantajlar\u0131<\/h4>\n<p>\n    Bu dahili fonksiyonlar, derleyicinin donan\u0131m deste\u011fini en verimli \u015fekilde kullanmas\u0131n\u0131 sa\u011flar. Genellikle elle yaz\u0131lm\u0131\u015f C\/C++ kodundan \u00e7ok daha h\u0131zl\u0131d\u0131rlar \u00e7\u00fcnk\u00fc do\u011frudan i\u015flemci talimatlar\u0131na derlenirler.\n<\/p>\n<h3>4.2. Donan\u0131m Deste\u011fi: POPCNT Komutu<\/h3>\n<p>\n    Modern Intel ve AMD i\u015flemcileri (Nehalem ve sonras\u0131), do\u011frudan set bit sayma i\u015flemi i\u00e7in \u00f6zel bir talimat olan <code>POPCNT<\/code>'yi i\u00e7erir. Bu talimat, tek bir CPU d\u00f6ng\u00fcs\u00fcnde bir tamsay\u0131n\u0131n set bitlerini sayabilir.\n<\/p>\n<h4>4.2.1. POPCNT Nedir?<\/h4>\n<p>\n    <code>POPCNT<\/code>, \"population count\" anlam\u0131na gelir ve bir register'daki 1 bitlerinin say\u0131s\u0131n\u0131 hesaplar. Bu, \u00f6zellikle bit manip\u00fclasyonunun yo\u011fun oldu\u011fu uygulamalarda performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.\n<\/p>\n<h4>4.2.2. Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h4>\n<p>\n    \u0130\u015flemci, <code>POPCNT<\/code> talimat\u0131n\u0131 g\u00f6rd\u00fc\u011f\u00fcnde, donan\u0131msal olarak tasarlanm\u0131\u015f \u00f6zel bir devre kullanarak giri\u015f register'\u0131ndaki bitleri sayar ve sonucu bir ba\u015fka register'a yazar. Bu, yaz\u0131l\u0131msal d\u00f6ng\u00fclerden veya karma\u015f\u0131k bit manip\u00fclasyonlar\u0131ndan \u00e7ok daha h\u0131zl\u0131d\u0131r.\n<\/p>\n<h4>4.2.3. C\/C++'ta Kullan\u0131m\u0131<\/h4>\n<p>\n    Yukar\u0131da bahsedilen derleyici dahili fonksiyonlar\u0131 (<code>__builtin_popcount<\/code>, <code>__popcnt<\/code>) asl\u0131nda derleyicinin bu <code>POPCNT<\/code> donan\u0131m talimat\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flar. Bu nedenle, bu fonksiyonlar\u0131 kullanmak, m\u00fcmk\u00fcn olan en h\u0131zl\u0131 set bit sayma y\u00f6ntemini kullanmak anlam\u0131na gelir. Geli\u015ftiricinin do\u011frudan assembly kodu yazmas\u0131na gerek kalmaz.\n<\/p>\n<h2>5. Y\u00f6ntemlerin Kar\u015f\u0131la\u015ft\u0131rmas\u0131 ve Se\u00e7im Kriterleri<\/h2>\n<p>\n    Set bit sayma y\u00f6ntemleri aras\u0131nda se\u00e7im yaparken performans, ta\u015f\u0131nabilirlik ve kodun okunabilirli\u011fi gibi fakt\u00f6rleri g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir. A\u015fa\u011f\u0131daki tablo, farkl\u0131 y\u00f6ntemlerin genel bir kar\u015f\u0131la\u015ft\u0131rmas\u0131n\u0131 sunmaktad\u0131r:\n<\/p>\n<table>\n<thead>\n<tr>\n<th>Y\u00f6ntem<\/th>\n<th>Performans<\/th>\n<th>Ta\u015f\u0131nabilirlik<\/th>\n<th>Karma\u015f\u0131kl\u0131k<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Basit D\u00f6ng\u00fc<\/td>\n<td>D\u00fc\u015f\u00fck<\/td>\n<td>Y\u00fcksek<\/td>\n<td>O(bit_geni\u015fli\u011fi)<\/td>\n<td>Her bit i\u00e7in kontrol yapar.<\/td>\n<\/tr>\n<tr>\n<td>Brian Kernighan<\/td>\n<td>Orta - \u0130yi<\/td>\n<td>Y\u00fcksek<\/td>\n<td>O(set_bit_say\u0131s\u0131)<\/td>\n<td>Sadece set bit say\u0131s\u0131 kadar iterasyon yapar.<\/td>\n<\/tr>\n<tr>\n<td>Look-up Tablosu<\/td>\n<td>\u00c7ok \u0130yi<\/td>\n<td>Orta (tablo olu\u015fturma)<\/td>\n<td>O(1) (bayt ba\u015f\u0131na)<\/td>\n<td>\u00d6nceden hesaplanm\u0131\u015f de\u011ferleri kullan\u0131r. Bellek maliyeti var.<\/td>\n<\/tr>\n<tr>\n<td>B\u00f6l ve Y\u00f6net<\/td>\n<td>\u00c7ok \u0130yi<\/td>\n<td>Y\u00fcksek<\/td>\n<td>O(log(bit_geni\u015fli\u011fi))<\/td>\n<td>Paralel bit toplama mant\u0131\u011f\u0131.<\/td>\n<\/tr>\n<tr>\n<td>Derleyici Dahili Fonksiyonlar\u0131<\/td>\n<td>M\u00fckemmel<\/td>\n<td>D\u00fc\u015f\u00fck (derleyiciye \u00f6zel)<\/td>\n<td>O(1) (donan\u0131m deste\u011fiyle)<\/td>\n<td>Donan\u0131m POPCNT talimat\u0131n\u0131 kullan\u0131r.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>5.1. Ne Zaman Hangi Y\u00f6ntem Kullan\u0131lmal\u0131?<\/h3>\n<ul>\n<li><strong>Ta\u015f\u0131nabilirlik \u00f6nceli\u011fi varsa:<\/strong> Brian Kernighan algoritmas\u0131 iyi bir denge sunar. Basit d\u00f6ng\u00fc de her yerde \u00e7al\u0131\u015f\u0131r ancak yava\u015ft\u0131r.<\/li>\n<li><strong>Maksimum performans gerekiyorsa ve modern derleyiciler\/i\u015flemciler hedefleniyorsa:<\/strong> Derleyici dahili fonksiyonlar\u0131 (<code>__builtin_popcount<\/code>, <code>__popcnt<\/code>) tart\u0131\u015fmas\u0131z en iyi se\u00e7enektir.<\/li>\n<li><strong>\u00c7ok say\u0131da ve \u00e7e\u015fitli bit desenlerine sahip say\u0131lar i\u00e7in performans gerekiyorsa:<\/strong> Look-up tablosu veya B\u00f6l ve Y\u00f6net yakla\u015f\u0131m\u0131 da olduk\u00e7a h\u0131zl\u0131d\u0131r ve donan\u0131m deste\u011fi olmayan ortamlarda iyi bir alternatif olabilir.<\/li>\n<li><strong>E\u011fitim veya basit prototipleme i\u00e7in:<\/strong> Basit d\u00f6ng\u00fc y\u00f6ntemi anla\u015f\u0131lmas\u0131 en kolay olan\u0131d\u0131r.<\/li>\n<\/ul>\n<h2>Sonu\u00e7<\/h2>\n<p>\n    C\/C++'ta set bitleri saymak, basit bir problem gibi g\u00f6r\u00fcnse de, performans gereksinimlerine g\u00f6re \u00e7ok \u00e7e\u015fitli ve sofistike \u00e7\u00f6z\u00fcmler sunar. Basit d\u00f6ng\u00fcden Brian Kernighan'\u0131n zarif algoritmas\u0131na, look-up tablolar\u0131ndan paralel bit sayma tekniklerine ve nihayetinde derleyici ve donan\u0131m destekli yerle\u015fik fonksiyonlara kadar bir\u00e7ok farkl\u0131 yakla\u015f\u0131m mevcuttur. Uygulaman\u0131z\u0131n \u00f6zel ihtiya\u00e7lar\u0131na (performans, ta\u015f\u0131nabilirlik, bellek k\u0131s\u0131tlamalar\u0131) ba\u011fl\u0131 olarak en uygun y\u00f6ntemi se\u00e7mek, kodunuzun verimlili\u011fini ve genel sistem performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde etkileyebilir. G\u00fcn\u00fcm\u00fcz modern geli\u015ftirme ortamlar\u0131nda, genellikle derleyici dahili fonksiyonlar\u0131n\u0131 kullanmak en h\u0131zl\u0131 ve pratik \u00e7\u00f6z\u00fcmd\u00fcr, ancak di\u011fer y\u00f6ntemleri de bilmek, farkl\u0131 senaryolarda esneklik sa\u011flar.\n<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>1. Set bit (population count) nedir?<\/h3>\n<p>\n    Bir say\u0131n\u0131n ikili (binary) g\u00f6sterimindeki \"1\" de\u011ferli bitlerin toplam say\u0131s\u0131d\u0131r. \u00d6rne\u011fin, 5 say\u0131s\u0131n\u0131n ikili g\u00f6sterimi <code>101<\/code>'dir ve 2 set biti vard\u0131r. 12 say\u0131s\u0131n\u0131n ikili g\u00f6sterimi <code>1100<\/code>'d\u00fcr ve 2 set biti vard\u0131r.\n<\/p>\n<h3>2. Neden set bitleri sayma i\u015flemi \u00f6nemlidir?<\/h3>\n<p>\n    Set bit sayma i\u015flemi, bilgisayar bilimlerinin bir\u00e7ok alan\u0131nda kullan\u0131l\u0131r:<\/p>\n<ul>\n<li><strong>Kriptografi:<\/strong> G\u00fcvenlik algoritmalar\u0131nda.<\/li>\n<li><strong>Veri S\u0131k\u0131\u015ft\u0131rma:<\/strong> Bit tabanl\u0131 s\u0131k\u0131\u015ft\u0131rma tekniklerinde.<\/li>\n<li><strong>Hata Tespit ve D\u00fczeltme Kodlar\u0131:<\/strong> Hamming mesafesi hesaplamalar\u0131nda.<\/li>\n<li><strong>Grafik \u0130\u015fleme:<\/strong> G\u00f6r\u00fcnt\u00fc filtreleri ve bit maskeleme i\u015flemlerinde.<\/li>\n<li><strong>Oyun Geli\u015ftirme:<\/strong> Bitboard tabanl\u0131 oyunlarda (\u00f6rn. satran\u00e7).<\/li>\n<\/ul>\n<h3>3. C\/C++'ta set bitleri saymak i\u00e7in en h\u0131zl\u0131 y\u00f6ntem hangisidir?<\/h3>\n<p>\n    Modern i\u015flemcilerde (Intel Nehalem ve sonras\u0131) ve derleyicilerde (GCC, Clang, MSVC) donan\u0131m destekli <code>POPCNT<\/code> talimat\u0131n\u0131 kullanan dahili fonksiyonlar (\u00f6rn. <code>__builtin_popcount<\/code> veya <code>__popcnt<\/code>) genellikle en h\u0131zl\u0131 y\u00f6ntemdir. Bu fonksiyonlar, tek bir CPU d\u00f6ng\u00fcs\u00fcnde i\u015flemi tamamlayabilir.\n<\/p>\n<h3>4. Dahili derleyici fonksiyonlar\u0131n\u0131 (\u00f6rn. <code>__builtin_popcount<\/code>) kullanmak g\u00fcvenli mi?<\/h3>\n<p>\n    Evet, bu fonksiyonlar derleyici taraf\u0131ndan sa\u011flanan standart uzant\u0131lard\u0131r ve genellikle olduk\u00e7a g\u00fcvenlidir. Ancak, farkl\u0131 derleyiciler aras\u0131nda ta\u015f\u0131nabilirlik sorunlar\u0131 ya\u015fanabilir. \u00c7apraz platform uyumlulu\u011fu i\u00e7in, bu fonksiyonlar\u0131 <code>#ifdef<\/code> direktifleri ile sarmak veya alternatif olarak Brian Kernighan algoritmas\u0131 gibi ta\u015f\u0131nabilir bir y\u00f6ntemi yedek olarak sunmak iyi bir yakla\u015f\u0131md\u0131r.\n<\/p>\n<h3>5. \u00c7ok b\u00fcy\u00fck say\u0131lar (\u00f6rn. 128-bit) i\u00e7in hangi y\u00f6ntem daha iyi?<\/h3>\n<p>\n    E\u011fer derleyiciniz ve hedef i\u015flemciniz 128-bit tamsay\u0131lar\u0131 ve bunlara \u00f6zel <code>popcount<\/code> intrinsics'lerini destekliyorsa, yine dahili fonksiyonlar en iyisidir. Aksi takdirde, B\u00f6l ve Y\u00f6net (Divide and Conquer) yakla\u015f\u0131m\u0131 veya look-up tablosu (daha b\u00fcy\u00fck tablolar gerektirse de) y\u00fcksek performans sunabilir. Brian Kernighan algoritmas\u0131 da hala ge\u00e7erli bir se\u00e7enektir, ancak daha fazla iterasyon gerektirecektir.<\/p>\n","protected":false},"excerpt":{"rendered":"Bilgisayar bilimlerinde ve d\u00fc\u015f\u00fck seviyeli programlamada, bir say\u0131n\u0131n ikili (binary) g\u00f6sterimindeki &#8220;set&#8221; (yani 1 de\u011feri ta\u015f\u0131yan) bit say\u0131s\u0131n\u0131 bul&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1489],"tags":[],"class_list":{"0":"post-39477","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-c-2","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C\/C++&#039;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\/C++&#039;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Bilgisayar bilimlerinde ve d\u00fc\u015f\u00fck seviyeli programlamada, bir say\u0131n\u0131n ikili (binary) g\u00f6sterimindeki &quot;set&quot; (yani 1 de\u011feri ta\u015f\u0131yan) bit say\u0131s\u0131n\u0131 bul...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-22T08:01:16+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"C\/C++&#8217;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-02-22T08:01:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/\"},\"wordCount\":2139,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/\",\"name\":\"C\/C++'ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-22T08:01:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\/C++&#8217;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"C\/C++'ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"C\/C++'ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber","og_description":"Bilgisayar bilimlerinde ve d\u00fc\u015f\u00fck seviyeli programlamada, bir say\u0131n\u0131n ikili (binary) g\u00f6sterimindeki \"set\" (yani 1 de\u011feri ta\u015f\u0131yan) bit say\u0131s\u0131n\u0131 bul...","og_url":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-22T08:01:16+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"C\/C++&#8217;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber","datePublished":"2026-02-22T08:01:16+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/"},"wordCount":2139,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/","name":"C\/C++'ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-22T08:01:16+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/c-cta-set-bitleri-sayma-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"C\/C++&#8217;ta Set Bitleri Sayma: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=39477"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39477\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}