तो, PHP में हस्ताक्षर किए गए (>>>) हस्ताक्षरित दाएं स्थानांतरित करने के लिए मेरी विधि का उपयोग करते समय, परिणाम गलत है जब संख्या नकारात्मक होती है।PHP बिना हस्ताक्षर किए गए दाएं शिफ्ट -
पीएचपी आवेदन परिणाम:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 2684354558
जावा आवेदन के परिणाम:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 536870910
(शीर्ष परिणाम सही और जावा द्वारा उत्पन्न और फिर नीचे परिणाम गलत और PHP के द्वारा उत्पन्न कर रहे हैं)
यह तब होता है जब PHP में संख्या नकारात्मक होती है जो विफल हो जाती है।
बदलाव उन अनुप्रयोगों में इस्तेमाल किया जा रहा है:
करें यदि आप कर सकते हैं मदद! PHP में स्थानांतरण के लिए
विधि:
function urshift($x, $n){
$mask = 0x40000000;
if ($x < 0){
$x &= 0x7FFFFFFF;
$mask = $mask >> ($n-1);
$ret = ($x >> $n) | $mask;
$ret = str_pad(decbin($ret), 32, '0', STR_PAD_LEFT);
$ret[0] = '1';
$ret = bindec($ret);
} else {
$ret = (int)$x >> (int)$n;
}
return $ret;
ठीक है, यह स्पष्ट नहीं है कि आपके परिणाम आपके कोड से कैसे मेल खाते हैं। क्या आप एक [न्यूनतम टेस्ट-केस] (http://sscce.org) बना सकते हैं जो स्पष्ट रूप से दर्शाता है कि इनपुट और आउटपुट का उपयोग कैसे किया जाता है? –
मैंने इसे ठीक किया है, इसलिए यह स्पष्ट है कि वह इनपुट और आउटपुट क्या है। –