2012-10-04 12 views
6

मेरे पास एक मान है जिसे मैं किसी दिए गए संरेखण में संरेखित करना चाहता हूं, यानी संरेखण के अगले एकाधिक को मान बढ़ाएं यदि यह पहले से गठबंधन नहीं है।किसी दिए गए संरेखण के लिए मान को संरेखित कैसे करें

सी ++ में ऐसा करने का संक्षिप्त तरीका क्या है?

जैसे

int x; 
int alignment; 
int y = ???; // align x to alignment 
+2

सी ++ 11 है 'alignas' , यदि आप इसका उपयोग कर सकते हैं। – chris

+0

बस स्पष्ट होने के लिए: आप * मेमोरी संरेखण * के बारे में बात कर रहे हैं * इसलिए आप * "मूल्य बढ़ाने" नहीं चाहते हैं - आप ऑब्जेक्ट के मेमोरी एड्रेस को संरेखित करना चाहते हैं; क्या वह सही है? –

+0

int y = x + (x% संरेखण == 0? 0: संरेखण - x% संरेखण) –

उत्तर

8

कहना संरेखण a

---(k-1)a-----------x--------------ka--------- 
     <----r----><-----(a-r)---> 

जहां k एक पूर्णांक है है की सुविधा देता है

पहले शेष

लगता है (ताकि ka संरेखण की एक बहु है) r = x%a

तो अगले कई

y = x + (a-r)

को एक्स को बढ़ा देते लेकिन अगर आर = 0, तो y = एक्स

तो अंत में

r = x%a; 
y = r? x + (a - r) : x; 
+1

यदि आप शेष 'आर' हैं तो आप केवल वृद्धि करना चाहते हैं। तो यह 'वाई = आर है? एक्स + (ए-आर): एक्स ' – ScaryAardvark

+0

हां। मेरा जवाब संपादित किया। धन्यवाद। – Shashwat

+0

धन्यवाद, यह पूरी तरह से काम करता है। – ljbade