मैं विश्वविद्यालय के लिए एक अभ्यास कर रहा था जहां मुझे बाहर निकलने के साथ एक मूल्य वापस करना पड़ा, वह मूल्य वास्तव में कुछ की गिनती थी। यह 255 से ऊपर हो सकता है (जो बाहर निकलें() संभाल नहीं सकता है) लेकिन शिक्षक ने परीक्षण डेटा का उपयोग करने का सुझाव दिया जहां गिनती उस मूल्य से ऊपर कभी नहीं जा सकती थी।बाहर निकलने() स्थिति पर 256 तक सी ओवर डिवीजन में WEXITSTATUS मैक्रो का उपयोग करने में कोई लाभ?
इस सब के बाद, मुझे इस गिनती मूल्य को संभालने की आवश्यकता है, बाहर निकलने की स्थिति, मुझे यह मूल्य मुख्य प्रक्रिया में waitpid() का उपयोग कर मिला है। मेरे आश्चर्य की बात है कि, यदि बाल प्रक्रिया 1 लौटा दी गई, तो मुख्य प्रक्रिया में "असली" मान 256 था, 2 512 था और इसी तरह ...
मुझे इस मान को प्रिंट करने की आवश्यकता है इसलिए मैंने इसे 256 तक विभाजित किया और वह हो गया था। हालांकि, अगर मैं WEXITSTATUS() मैक्रो का उपयोग, मैं भी इस मूल्य तरह से मैं यह चाहता हूँ ...
मैं सी स्रोत कोड को देखा मिल जाएगा और यह है कि मैं क्या पता चला:
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
मैं समझता हूं कि यहां क्या हो रहा है, उदाहरण के लिए, बाइनरी में 512 10 0000 0000 है, दाईं ओर 8 ओ स्थानांतरित करने से 00 0000 0010, जो दशमलव में 2 है। मुझे इस मैक्रो में क्या समझ में नहीं आता है कि & ऑपरेटर और तथ्य यह है कि 0xff00 एक यादृच्छिक संख्या प्रतीत होता है (शायद यह नहीं है, यह कहां से आता है?)। यह वास्तव में क्या करता है, मैक्रो में "& 0xff00" क्यों है? क्या यह इसके साथ काम नहीं करेगा?
और इस विषय में असली सवाल, मेरे मैक्रो में 256 तक विभाजित करने के समान ही बात है?