java - ऑपरेटर नहीं




javascript c++ (7)

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


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

आगे की पढाई:


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


मानक बाइनरी एन्कोडिंग में, 0 सभी 0s है, ~ बिट वाइज नहीं है। सभी 1s हस्ताक्षरित पूर्णांक प्रकारों के लिए (सबसे अधिक बार) -1 है। तो एक हस्ताक्षरित बाइट प्रकार के लिए:

0xFF = -1    // 1111 1111
0xFE = -2    // 1111 1110
...
0xF0 = -128  // 1000 0000
0x7F = 127   // 0111 1111
0x7E = 126   // 0111 1110
...
0x01 = 1     // 0000 0001
0x00 = 0     // 0000 0000

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

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


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

~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





twos-complement