किसी को भी, नीचे दिए गए कोड
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -1
किसी को भी, नीचे दिए गए कोड
<? $temp = 0; echo ~$temp; ?>
//instead of 1 it displays -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 // - (एन ++)
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
-1
है।
~
ऑपरेटर 0
के हर बिट को वापस ले जाता है।
संबंध है: -$temp === ~$temp + 1
अच्छा जवाब Cthulhu से आ रहा है। –
साइन काफी महत्वपूर्ण है;) – Christoph