कारण आप बिटवाइंड पॉइंटर ऑपरेशंस नहीं कर सकते हैं क्योंकि मानक कहता है कि आप नहीं कर सकते हैं। मुझे लगता है कि मानक ऐसा क्यों कहता है क्योंकि बिटवाई पॉइंटर ऑपरेशंस लगभग सार्वभौमिक रूप से अपरिभाषित या (सर्वोत्तम रूप से) कार्यान्वयन-परिभाषित व्यवहार में परिणाम देगा। तो ऐसा कुछ भी नहीं होगा जो आप कर सकते हैं उपयोगी और पोर्टेबल, अतिरिक्त संचालन जैसे आसान संचालन के विपरीत होगा।
लेकिन आप कास्टिंग के साथ उसके चारों ओर प्राप्त कर सकते हैं:
#include <stdint.h>
void *ptr1;
// Find page start
void *ptr2 = (void *) ((uintptr_t) ptr1 & ~(uintptr_t) 0xfff)
सी ++ का सवाल है, तो बस के बजाय सी शैली डाले की reinterpret_cast
का उपयोग करें।
स्रोत
2013-04-07 21:58:12
मैं इसके लिए आपके उपयोग के मामले के बारे में उत्सुक हूं। क्या आप विस्तार से समझा सकते हैं? –
आप "प्रभाव" क्या हासिल करने की कोशिश कर रहे हैं? पॉइंटर्स पर बिट ऑपरेशन वास्तव में समझ में नहीं आता है। –
अधिकांशतः गठबंधन आवंटन, जिसे वास्तव में अब भी आवश्यक नहीं है क्योंकि रनटाइम आम तौर पर आपके लिए यांत्रिकी प्रदान करता है। – WhozCraig