मुझे बाएं शिफ्ट से परिणाम मिल रहे हैं जिनके लिए मुझे स्पष्टीकरण नहीं मिला।बिना हस्ताक्षर किए गए char का परिणाम << unsigned char हस्ताक्षरित नहीं है char
unsigned char value = 0xff; // 1111 1111
unsigned char = 0x01; // 0000 0001
std::cout << "SIZEOF value " << sizeof(value) << "\n"; // prints 1 as expected
std::cout << "SIZEOF shift " << sizeof(shift) << "\n"; // prints 1 as expected
std::cout << "result " << (value << shift) << "\n"; // prints 510 ???
std::cout << "SIZEOF result " << sizeof(value << shift) << "\n"; // prints 4 ???
मैं परिणाम उम्मीद कर रहा था 1111 1110
होने के लिए, लेकिन इसके बजाय मैं 1 1111 1110
के मूल्य के साथ int
(?) मिलता है।
एक हस्ताक्षरित चार के बिट्स को बाईं ओर कैसे स्थानांतरित किया जा सकता है ताकि बिट्स को छोटा कर दिया जा सके और नतीजा 1111 1110 हो?
जो मैं करने की कोशिश कर रहा हूं वह बाइट्स की श्रृंखला को पढ़ना और उन्हें अलग-अलग लंबाई (1-32 बिट्स) के पूर्णांक के रूप में समझना है।
F0 F5
1111 0000 1111 0101
हो सकता है
0F (first 4 bits)
0F (next 8 bits)
05 (last 4 bits)
तथ्य यह है कि गणित पूर्णांक की तुलना में छोटे प्रकार के साथ नहीं किया जाता है के साथ क्या करना यह कुछ है?
11111111 << 1 वास्तव में 111111110 है, आप अभिव्यक्ति का परिणाम प्रिंट कर रहे हैं, करने का प्रयास करें: 'value = value << shift; 'और फिर' cout << value; ' – Yaniro