java ऑपरेटर नहीं




javascript c++ (8)

बिटवाइज़ ऑपरेशन (~0); क्यों (~0); प्रिंट -1? बाइनरी में, 0 नहीं 1 होना चाहिए। क्यूं कर ?


यह द्विआधारी व्युत्क्रम है, और दूसरे पूरक -1 में द्विआधारी व्युत्क्रम है।


आप वास्तव में क्या कह रहे हैं ~ 0x00000000 और इसका परिणाम 0xFFFFFFFF है। जावा में एक हस्ताक्षरित (हस्ताक्षरित) इंट के लिए, जिसका अर्थ है -1।


क्योंकि ~ द्विआधारी उलटा नहीं है, यह बिटवाइस उलटा है। बाइनरी उलटा होगा ! और (जावा में) केवल बूलियन मूल्यों पर लागू किया जा सकता है।


~ एक बिटवाइज़ ऑपरेटर है।

~0 = 1 which is -1 in 2's complement form  

http://en.wikipedia.org/wiki/Two's_complement

दो के पूरक रूप में कुछ संख्याएँ और उनके बिट-वार नहीं ~ (उनके ठीक नीचे):

0 1 1 1 1 1 1 1 = 127
1 0 0 0 0 0 0 0 = 0128

0 1 1 1 1 1 1 0 = 126
1 0 0 0 0 0 0 1 = =127

1 1 1 1 1 1 1 1 = 11
0 0 0 0 0 0 0 0 0 = 0

1 1 1 1 1 1 1 0 = 12
0 0 0 0 0 0 0 1 = 1 है

1 0 0 0 0 0 0 1 = =127
0 1 1 1 1 1 1 0 = 126

1 0 0 0 0 0 0 0 = 0128
0 1 1 1 1 1 1 1 = 127


0 यहाँ एक सा नहीं है। यह एक बाइट (कम से कम; या अधिक) - 00000000 है। बिटवाइज़ का उपयोग करना या हमारे पास 11111111 होगा। यह पूर्णांक के रूप में हस्ताक्षरित है ...


मुझे लगता है कि असली कारण यह है कि ~ दो का पूरक है।

जावास्क्रिप्ट, चरित्र की टिल्ड को नामित करता है, ~, दो के पूरक के लिए, भले ही अधिकांश प्रोग्रामिंग भाषाओं में टिल्ड किसी के पूरक के लिए थोड़ा टॉगल करता है।


32 बिट हस्ताक्षरित पूर्णांक के लिए

~00000000000000000000000000000000=11111111111111111111111111111111 (जो -1 है)


आप वास्तव में काफी करीब हैं।

बाइनरी में, 0 नहीं 1 होना चाहिए

हां, यह बिल्कुल सही है जब हम एक बिट के बारे में बात कर रहे हैं।

कैसे, एक int जिसका मान 0 है वास्तव में सभी शून्य के 32 बिट्स है! ~ सभी 32 जीरो को 32 लोगों में बदल देता है।

System.out.println(Integer.toBinaryString(~0));
// prints "11111111111111111111111111111111"

यह -1 का दो पूरक प्रतिनिधित्व है।

इसी तरह:

System.out.println(Integer.toBinaryString(~1));
// prints "11111111111111111111111111111110"

अर्थात्, दो के पूरक प्रतिनिधित्व में 32-बिट अहस्ताक्षरित int के लिए, ~1 == -2

आगे की पढाई:





twos-complement