2011-09-24 13 views
10

नहीं है कोड:दो अहस्ताक्षरित चार चर जोड़ने और परिणाम पूर्णांक है

#include <iostream> 
int main(){ 
    unsigned char a = 4, b = 255; 
    int g = (unsigned char)a + (unsigned char)b; 
    std::cout << g << std::endl; 
    return 0; 
} 

परिणाम:

259 

क्यों परिणाम 259 3 है, है ना? दो अहस्ताक्षरित चार चर वहाँ जोड़ रहे हैं तो इस बात अतिप्रवाह होना चाहिए, परिणाम 3 होना चाहिए और फिर इसे अहस्ताक्षरित चार 3 से परिवर्तित करना चाहिए 3.

उत्तर

14

int के अलावा आपरेशन होगा पहला promoteint करने के लिए अपने ऑपरेंड, इसके करने से पहले । यह कैसे काम करता है सी है। आप काटना चाहते हैं, आप इस तरह के unsigned char के रूप में, इसे वापस आवंटित करने के लिए एक संकरा प्रकार में की जरूरत है।

6

इंटीजर अंकगणित int से छोटे डेटा प्रकारों पर कभी नहीं किया जाता है। उदाहरण के लिए, int जैसे की तुलना में छोटे प्रकार के लिए दो प्रकार के char और short int जोड़े जाते हैं, वे किसी भी गणित ऑपरेशन से पहले int करने के लिए प्रोत्साहित कर रहे हैं और परिणाम एक पूर्णांक प्रकार है। यदि किसी प्रकार का प्रकार int long long int और int से बड़ा होता है तो int को long long int पर प्रचारित किया जाता है और परिणाम long long int होता है।

(§ 4.5/1) - प्रकार चार के एक rvalue, पर हस्ताक्षर किए चार, अहस्ताक्षरित चार, लघु पूर्णांक, या अहस्ताक्षरित लघु पूर्णांक प्रकार int के एक rvalue में बदला जा सकता है, तो पूर्णांक सभी का प्रतिनिधित्व कर सकते स्रोत प्रकार के मूल्यों; अन्यथा, स्रोत rvalue प्रकार अहस्ताक्षरित int की एक rvalue में बदला जा सकता।

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