Biten işaretleme işlemlerini yapamayacağınız nedeni, standardın yapamayacağınız anlamına gelmesidir. Standartın neden böyle yazıldığını düşünürüm, çünkü bitsel işaretçi işlemleri neredeyse evrensel olarak tanımlanmamış veya (en iyi) uygulama tanımlı davranışa neden olur. Yani, kullanışlı ve taşınabilir, ekleyebileceğiniz hiçbir şey olmayacak, ek olarak daha basit işlemlerin aksine.
Ama döküm ile etrafında alabilirsiniz:
#include <stdint.h>
void *ptr1;
// Find page start
void *ptr2 = (void *) ((uintptr_t) ptr1 & ~(uintptr_t) 0xfff)
C++ gelince, sadece yerine C tarzı atmalarını ait
reinterpret_cast
kullanın.
Bunun için kullanım durumunuzu merak ediyorum. Detaylandırır mısın? –
Ne "etkisi" elde etmeye çalışıyorsun? İşaretçilerdeki bit işlemleri gerçekten mantıklı değil. –
Büyük olasılıkla hizalanmış tahsis, çalışma zamanı genellikle sizin için mekaniği sağladığından beri artık gerçekten gerekmiyor. – WhozCraig