यह सी का एक परिणाम है पूर्णांक पदोन्नति नियम। अनिवार्य रूप से, अभिव्यक्ति में जाने वाले किसी भी चर को "प्रचारित" किया जाता है ताकि इस तरह के संचालन परिशुद्धता को न खोएं। फिर, यह int
के रूप में printf
में पारित किया गया है, सी के परिवर्तनीय तर्क नियमों के अनुसार। स्टीफन टिप्पणी के रूप में विनिर्दिष्ट काम नहीं करेगा क्योंकि %c
एक उम्मीद %c
का उपयोग कर:
आप चाहते हैं कि आप क्या देख रहे हैं, तो आप unsigned char
वापस करने के लिए कास्ट करने के लिए होगा:
#include <stdio.h>
int main()
{
unsigned char i=0x80;
printf("%d",((unsigned char)(i<<1)));
return 0;
}
नोट पूर्णांक भी
संपादित करें: इसके अलावा, आप ऐसा कर सकता है:
#include <stdio.h>
int main()
{
unsigned char i=0x80;
unsigned char res = i<<1;
printf("%d",res);
return 0;
}
या
#include <stdio.h>
int main()
{
unsigned char i=0x80;
printf("%d",(i<<1) & 0xFF);
return 0;
}
स्रोत
2010-07-30 16:51:49
उत्तर के रूप में पोस्ट नहीं करना चाहते क्योंकि मैं 100% निश्चित नहीं हूं, लेकिन ऐसा नहीं है क्योंकि% d एक पूर्णांक है? तो, दृश्यों के पीछे कोड शायद इसे प्रिंट करने के लिए एक पूर्णांक में 'i << 1' असाइन करता है, जिसका अर्थ है कि यह फिट बैठता है और बहता नहीं है। 'Printf ("% c ", i << 1) करने का प्रयास करें;'? – Stephen
@ स्टीफन: जवाब पोस्ट करना चाहिए था;) – KevenK
@ स्टीफन: जब मैं% c का उपयोग करता हूं तो आउटपुट खाली होता है। – Variance