C11 §6.5.7 अनुच्छेद 5:"-1 >> 5;" है सी में अनिश्चित व्यवहार?
E1 >> E2
का परिणामE1
सही-स्थानांतरितE2
बिट पदों है। यदिE1
एक अहस्ताक्षरित प्रकार है या यदिE1
एक हस्ताक्षरित प्रकार और एक गैर नकारात्मक मान होता है, परिणाम का मूल्यE1/2*^E2
की भागफल के अभिन्न अंग है। यदिE1
पर एक हस्ताक्षरित प्रकार और नकारात्मक मान है, परिणामी मान कार्यान्वयन-परिभाषित है।
लेकिन, viva64 संदर्भ दस्तावेज कहते हैं:
int B; B = -1 >> 5; // unspecified behavior
मैं GCC पर इस कोड को भाग गया और यह हमेशा एक निर्गम -1
दे रहा है।
तो, मानक मान लें कि "E1 एक हस्ताक्षरित प्रकार और एक नकारात्मक मूल्य होता है, तो परिणामस्वरूप मूल्य कार्यान्वयन परिभाषित किया गया है", लेकिन उस दस्तावेज़ का कहना है कि -1>>5;
अनिर्दिष्ट व्यवहार है।
तो, -1>>5;
सी में अनिर्दिष्ट व्यवहार है? क्या सही है?
तुम इतनी कोड चेकर्स उन्हें इसी तरह का इलाज, पोर्टेबल कोड, के बीच भेद कार्यान्वयन से परिभाषित और अनिर्दिष्ट बहुत महत्वपूर्ण नहीं है लिखने की कोशिश कर रहे हैं। – Barmar
यह कार्यान्वयन-परिभाषित है। – chux
@chux तो, वह दस्तावेज़ गलत है ?? – rsp