2012-06-10 17 views
5

तो जैसा कि मैं reading about ~, था~ 0 -1 क्यों है?

प्रत्येक बिट पर नहीं ऑपरेटर करता है।

तो मैं करने की कोशिश की:

0 = 00000000000000000000000000000000 

     so ~0 should be 

~0 = 11111111111111111111111111111111 

लेकिन जब मैं करने की कोशिश की है, यह -1 देता है। 11111111111111111111111111111111 है 4294967295 दशमलव में?

+1

डुप्लिकेट: http://stackoverflow.com/questions/3141163/why-do-unsigned-int-x-1-and-int-y-0-have-the-same-binary-representation – copy

+0

@copy - यह 'सी' जावास्क्रिप्ट में नहीं है। –

+4

यह एक बहुत ही बुनियादी बात है जो अधिकांश प्रोग्रामिंग भाषाओं पर लागू होती है। Http://en.wikipedia.org/wiki/Two%27s_complement या http://stackoverflow.com/a/3141181/1078067 – copy

उत्तर

9

इसे एक हस्ताक्षरित पूर्णांक के रूप में व्याख्या किया गया है, और दो पूरक में, सभी बिट्स 1 के साथ एक पूर्णांक -1 है।

+0

पढ़ें तो जब आप बाइनरी में '42 9 4 9 672 9 5' चालू करते हैं तो इसे वापस दशमलव में बदल दें, यह ' -1'? –

+1

संभावित रूप से जोड़ने के लायक - जुड़वां पूरक में, सभी बिट्स के पास वही मूल्य होता है जो वे सबसे महत्वपूर्ण के अलावा एक हस्ताक्षरित मूल्य के लिए करेंगे। यह सबसे महत्वपूर्ण बिट (एमएसबी) के पास एक असाइन किए गए मान में समान बिट के सापेक्ष ऋणात्मक मूल्य है - उदा। 32 बिट पूर्णांक के लिए, एमएसबी बिना हस्ताक्षर किए गए +2147483648 के बजाय दोहरे पूरक के लिए -2147483648 लायक है। – Steve314

+1

यह प्रयुक्त भाषा और प्रकारों पर निर्भर करता है, @ डेरेक। अगर मुझे जावास्क्रिप्ट के व्यवहार को सही तरीके से याद है, यदि आप '42 9 4 9 672 9 5 'दर्ज करते हैं, तो इसे' नंबर 'के रूप में माना जाएगा और इसे' डबल 'के रूप में आंतरिक रूप से प्रदर्शित किया जाएगा, इसलिए इसे स्वचालित रूप से' -1' में नहीं बदला जाएगा। लेकिन यदि आप इस पर थोड़ा संचालन करते हैं, तो इसे एक (हस्ताक्षरित) 32-बिट पूर्णांक में परिवर्तित कर दिया जाएगा, और फिर बिट पैटर्न को '-1' के रूप में व्याख्या किया जाएगा। –

6

सभी 1 रों के बारे में थोड़ी-पैटर्न एक अहस्ताक्षरित पूर्णांक, या एक से अधिक 32-बिट साथ एक हस्ताक्षरित पूर्णांक के लिए 4294967295 है। 32-बिट्स के साथ हस्ताक्षरित पूर्णांक के लिए दो के पूरक इसके -1 के रूप में दर्शाया गया है।

7

केवल तभी जब हस्ताक्षर हस्ताक्षरित है। हस्ताक्षर किए गए पूर्णांक शीर्षतम बिट को अस्वीकृति ध्वज के रूप में उपयोग करते हैं - और इस प्रकार इसे 1 परिणाम को ऋणात्मक संख्या में सेट करते हैं। Two's Complement देखें।