2012-11-01 18 views
6

किसी को भी, नीचे दिए गए कोड

<? $temp = 0; echo ~$temp; ?> 
    //instead of 1 it displays -1 

उत्तर

1

बिटवाइस-नहीं (~):

यह अपने संकार्य के प्रत्येक बिट उलट। यदि ऑपरेंड एक फ़्लोटिंग पॉइंट मान है, तो यह गणना से पहले एक पूर्णांक को छोटा कर दिया जाता है। यदि ऑपरेंड 0 और 42 9 4 9 672 9 5 (0xffffffff) के बीच है, तो इसे 32-बिट मान के बिना हस्ताक्षरित माना जाएगा। अन्यथा, इसे एक हस्ताक्षरित 64-बिट मान

के रूप में माना जाता है क्योंकि आप वास्तव में पूर्ण 32-बिट हस्ताक्षरित पूर्णांक से नहीं हैं। क्या इसका मतलब है कि आप बस 0001 नहीं inverting रहे हैं, लेकिन 00000000000000000000000000000001

जो हो जाता है 11111111111111111111111111111110

अनिवार्य रूप से इस नंबर + 1 और नकार दिया गया है inverting है। इसलिए 1 हो जाता है - (संख्या +1) है जो -1 या 1111111111111111111111111111110 बाइनरी (अहस्ताक्षरित)

उदाहरण के लिए

में : - $ अस्थायी = 1; गूंज ~ $ अस्थायी; प्रिंट -2 // - (एन ++)

4
echo ~$temp; 
    ^bitwise not operator 

मान लिया जाये कि 32-बिट के आंतरिक प्रक्रिया बता सकते हैं 0000 की Bitwise उलटा FFFF (सभी 1 की) जो -1 है, पर हस्ताक्षर किए पूर्णांक के मामले में है।


एक और तरीका है इसे देखने के लिए: क्या ~ किया आदेश एक नंबर के नकारात्मक प्राप्त करने के लिए आप (One's complement)

दे रहा है, तो आप 2 के पूरक हैं, जो सिर्फ है ले 1's complement + 1

तो,

(1's complement of 0) + 1 = 0 //negative 0 is 0 
hence, 1's complement of 0 = -1 
+0

अच्छा जवाब Cthulhu से आ रहा है। –

+0

साइन काफी महत्वपूर्ण है;) – Christoph

0

क्योंकि ~0-1 है।

~ ऑपरेटर 0 के हर बिट को वापस ले जाता है।

संबंध है: -$temp === ~$temp + 1

संबंधित मुद्दे