एक दृष्टिकोण की जांच करने, इस हो सकता है: (सा आपरेशन का उपयोग कर)नकारात्मक पूर्णांक की जांच का उपयोग कर बिट संचालन
int num_bits = sizeof(int) * 8; //assuming 8 bits per byte!
int sign_bit = given_int & (1 << (num_bits-1)); //sign_bit is either 1 or 0
if (sign_bit)
{
cout << "given integer is negative"<<endl;
}
else
{
cout << "given integer is positive"<<endl;
}
इस समाधान के साथ समस्या की संख्या है प्रति बाइट बिट्स 8 नहीं हो सकता है, यह प्रति बाइट 9,10, 11 भी 16 या 40 बिट्स हो सकता है। बाइट का मतलब 8 बिट्स का मतलब नहीं है! वैसे भी, इस समस्या को आसानी से लिखकर,
//CHAR_BIT is defined in limits.h
int num_bits = sizeof(int) * CHAR_BIT; //no assumption.
यह ठीक लगता है। लेकिन क्या यह वास्तव में है? क्या यह मानक अनुरूप है? क्या होगा यदि ऋणात्मक पूर्णांक 2 के पूरक के रूप में प्रदर्शित नहीं किया गया है? क्या होगा यदि यह एक बाइनरी संख्या प्रणाली में प्रतिनिधित्व है कि केवल नकारात्मक पूर्णांक को इसके सबसे महत्वपूर्ण बिट में 1 रखने की आवश्यकता है?
क्या हम ऐसे कोड लिख सकते हैं जो पोर्टेबल और मानक अनुरूप दोनों होंगे?
संबंधित विषय:
Size of Primitive data types
Why is a boolean 1 byte and not 1 bit of size?
'given_int <0' के साथ क्या गलत है? –
@ क्रिस: कुछ भी गलत नहीं है। बस मैं इसे "बिट ऑपरेशंस का उपयोग करके" करना चाहता था। – Nawaz
@ नवाज - यदि आपको '<' ऑपरेटर से कुछ तेज़ लगता है तो मुझे दिलचस्पी होगी। मुझे लगता है कि अधिकांश कंपाइलर '<' ऑपरेटर को जो कुछ भी आप खोजते हैं, उसे लागू करेंगे। लेकिन चीयर्स। –