सी ++ विंडोज वातावरण में कीबोर्ड नियंत्रणों का जिक्र करते समय 0x80 कोड का क्या अर्थ है?कीबोर्ड नियंत्रणों का जिक्र करते समय 0x80 कोड का क्या अर्थ है
उदाहरण के लिए,
if(GetKeyState('K') & 0x80) {
//do something
}
सभी को धन्यवाद!
सी ++ विंडोज वातावरण में कीबोर्ड नियंत्रणों का जिक्र करते समय 0x80 कोड का क्या अर्थ है?कीबोर्ड नियंत्रणों का जिक्र करते समय 0x80 कोड का क्या अर्थ है
उदाहरण के लिए,
if(GetKeyState('K') & 0x80) {
//do something
}
सभी को धन्यवाद!
शायद एक गैर toggleable कुंजी (जैसे कि एक 'के') के साथवापसी मान के अनुसार निर्दिष्ट आभासी कुंजी की स्थिति निर्दिष्ट करता है:
उच्च आदेश बिट 1 है, तो कुंजी को दबाए है; अन्यथा, यह ऊपर है।
यदि निम्न-आदेश बिट 1 है, तो कुंजी को टॉगल किया जाता है। एक कुंजी, जैसे कि सीएपीएस लॉक कुंजी, चालू होने पर टॉगल की जाती है। कुंजी कम है और कम-ऑर्डर बिट 0 है। कुंजीपटल पर एक टॉगल कुंजी का सूचक प्रकाश (यदि कोई है) तब होगा जब कुंजी को टॉगल किया जाता है, और जब कुंजी अनगिनत होती है तो बंद हो जाती है।
, कम-आदेश (अस्पष्ट शब्द - शायद वे 0x0080 मतलब है?) और उच्च आदेश (0x8000) बिट्स एक ही बात करते हैं?
एमएसडीएन दस्तावेज नहीं है अस्पष्ट - लघु का उच्च क्रम बिट 0x8000 है। कम ऑर्डर बिट 0x0001 है। मुझे यह सच होने के बारे में पता है क्योंकि जब भी मैंने इस फ़ंक्शन का उपयोग किया है, तो मैं आमतौर पर इसे 0 0 और 8x8000 के बजाय <0 के साथ परीक्षण करता हूं - यह वही चीज़ प्राप्त करता है। – Stewart
@ स्टीवर्ट: यही वह है जो मैं भी सोचूंगा - लेकिन फिर, दुनिया में क्यों यह काम करेगा (अगर यह वास्तव में काम करता है)? ... इसके अलावा, आपने जो कहा है उसके साथ कुछ भी नहीं है कि "लो-ऑर्डर बिट" 0x0080 या 0x0001 है .. –
मुझे नहीं लगता कि मुझे कभी भी कम बिट की आवश्यकता है। मुझे संदेह है कि कोड "काम करता है" क्योंकि दस्तावेज़ 1 से 14 के बिट्स के अर्थ के बारे में कुछ नहीं कहता है। उदासीन गैर-टॉगल करने योग्य कुंजी 0xfffe दस्तावेज़ों के अर्थ के भीतर पूरी तरह से मूल्य वापसी मूल्य होगा – Stewart
अद्यतन
downvotes की बाढ़ मुझे इस आगे की जांच में ला दिया। यहां बताया गया है कि GetKeyState
के रिटर्न मान (हेक्स में) कैसे काम करते हैं। मुझे k
जैसी कुंजी की टॉगल प्रॉपर्टी नहीं मिलती है, लेकिन मुझे लगता है कि इसमें कुछ डिफ़ॉल्ट स्थिति है जो इसे टॉगल करती है।
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
तो 0xff80
जोड़ा जब भी उच्च आदेश बिट सेट करने की आवश्यकता और कम आदेश बिट समझ में आता है जाता है। तो अब हम जानते हैं कि 0x80
दृष्टिकोण काम करता है --- क्योंकि निचले बाइट के उच्च-आदेश बिट को भी सेट किया गया है!
ओल्ड उत्तर
GetKeyState रिटर्न एक SHORT
जहां अगर उच्च आदेश बिट 1
है यह कुंजी का मतलब है। bitwise AND0x80
के साथ ऑपरेशन बस यह जांचता है कि वह बिट 1
है क्योंकि बाइनरी 0x80
10000000
है।
इसलिए बयान GetKeyState('K') & 0x80
0x80
वापसी होगी अगर GetKeyState('K')
द्वारा दिए गए मान के उच्च आदेश बिट 1
और 0
है अगर उच्च आदेश बिट 0
है।
MSDN documentation of the function कहता है:
उच्च आदेश बिट 1 है, तो कुंजी नीचे है; अन्यथा, यह ऊपर है।
बिट-वार और यदि परिणाम शून्य या गैर-शून्य है और सार में है कि बिट का मान की जाँच करता है 0x80 आप उच्च आदेश बिट, if
चेकों देता है के साथ।
यह चेक हालांकि GetKeyState()
SHORT
लौटाता है और एक छोटे से उच्च आदेश बिट को जांचने के लिए आपको थोड़ा-सा और 0x8000 के साथ जांचने के लिए एक गलती की तरह दिखता है।
तो मेरा सुझाव है कि आप एक डीबगर के साथ वापसी मूल्य की जांच करें और सत्यापित करें कि यह वास्तविकता में कैसे काम करता है।
मुझे लगता है कि आपका मतलब 0x8000 है, 0x80 नहीं। इस प्रकार,
वापसी मान निर्दिष्ट आभासी कुंजी की स्थिति निर्दिष्ट करता है:
-: अगर ऐसा है, तो आप प्रलेखन ( http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx) जो GetKeyState की वापसी मूल्य पर कहने के लिए निम्नलिखित है से परामर्श करना चाहिए• यदि उच्च-आदेश बिट 1 है, तो कुंजी नीचे है; अन्यथा, यह ऊपर है। • यदि निम्न-आदेश बिट 1 है, तो कुंजी को टॉगल किया गया है। एक कुंजी, जैसे कि सीएपीएस लॉक कुंजी, चालू होने पर टॉगल की जाती है। कुंजी कम है और कम-ऑर्डर बिट 0 है। कुंजीपटल पर एक टॉगल कुंजी का सूचक प्रकाश (यदि कोई है) तब होगा जब कुंजी को टॉगल किया जाता है, और जब कुंजी अनगिनत होती है तो बंद हो जाती है।
0x80 कुछ भी मतलब नहीं है कि जहाँ तक मुझे पता है, हालांकि
मुझे लगता है कि आप अपने कोड उदाहरण में कोई गलती है के रूप में - यह GetKeyState ('के') और 0x8000 – Stewart
यह अपने आवेदन में काम कर रहा है होना चाहिए जैसा कि यद्यपि है? – Paz
"काम करने" से आपका क्या मतलब है? यदि आपको नहीं पता कि यह क्या करना है, तो आप कैसे जानते हैं कि यह काम कर रहा है? – Stewart