मैं निम्नलिखित सी कोड लिखा है:सी हेक्स लगातार प्रकार
#include <stdio.h>
int main() {
printf("%d\n", -1 >> 8);
return 0;
}
मैं अपने x86_64 -m32 ध्वज का उपयोग पर जीसीसी 4.6.3 के साथ इस कोड को संकलित। मुझे -1 मुद्रित आउट मिलता है जैसा कि मैं उम्मीद करता हूं, शिफ्ट अंकगणित रूप से दो के पूरक प्रतिनिधित्व का उपयोग करके होता है जिसके परिणामस्वरूप -1 होता है।
अब अगर मैं बजाय
printf("%d\n", 0xFFFFFFFF >> 8);
बारे में मैं 16777215. मिल रहा अंकगणित जो में परिणाम होगा -1 फिर से होने की यह लगातार एक पूर्णांक (हस्ताक्षरित) के रूप में व्याख्या की जा करने के लिए और फिर पारी की उम्मीद होगी। मैंने नवीनतम सी मानक को देखा है और मुझे समझ में नहीं आता कि यह मामला क्यों है। कोई विचार?
यह बीच हस्ताक्षरित (-1) और अहस्ताक्षरित (0xFFFFFFFF) – SpacedMonkey
@SpacedMonkey मैं पूछ रहा हूँ क्यों 0xFFFFFFFF – dschatz
@SpacedMonkey Btw अहस्ताक्षरित है, '-' इस अंतर के लिए योगदान नहीं है अंतर है। '-' अभी भी एक यूनरी ऑपरेटर है और यह कुछ हस्ताक्षर नहीं करता है। यह '1' है जिस पर हस्ताक्षर किया गया है (और इसलिए' -1' भी हस्ताक्षरित है), जबकि '0xFFFFFFFF' हस्ताक्षरित है। –