मैं जिस भाषा का उपयोग करता हूं वह है सी एक्स और एन का प्रकार int है।~ (x-1) और ~ x + 1 के बीच का अंतर x = 0x80000000
मैं यह एक्स का मान से पता चलता n और एक्स के पूरक संख्या के n बिट्स स्थानांतरण के दो तरीके के रूप में निम्नलिखित
printf("x=%x,n=%d,first=%x,second=%x\n",x,n,((~(x+0xffffffff))>>n),((~x+1)>>n));
एक लाइन कोड है। जब x = 0x80000000, ~ (x + 0xffffffff) = 0x8000000, ~ x + 1 = 0x80000000, फिर भी इन दोनों को बिट्स द्वारा स्थानांतरित करते समय, परिणाम अलग-अलग होते हैं।
btw, अगर मैं (~ 1 + 1 के 0xffffffff बदल इसका मतलब है कि ~ (x + (~ 1 + 1)), परिणाम के रूप में ~ x + 1
मुझे आश्चर्य है कि ऐसा क्यों हुआ। धन्यवाद एक ही है ।
[है "(uint16_t) -1" पोर्टेबल सी कोड?] (Http://embeddedgurus.com/barr-code/2011/06/is-uint16_t-1-portable-c-code/) – Lundin
@ लंदन वह लेख गलत है। '(uint16_t) -1' ** **' 0xFFFF' उत्पादन करने के लिए मानक द्वारा गारंटीकृत है यदि कार्यान्वयन उस प्रकार को 'stdint.h' में प्रदान करता है। (बेशक, अगर यह आपकी खुद की टाइपिफ़ी है तो कुछ भी गारंटी नहीं दी जाती है।) कोई अस्पष्टता नहीं है, निश्चित चौड़ाई वाले प्रकारों में कोई पैडिंग बिट्स की आवश्यकता नहीं होती है, इसलिए यह मूल्य बिट्स तक भी सीमित नहीं है (ठीक है, यह तब से है 'uintN_t' में केवल मूल्य बिट्स हैं)। –