0 और 1 के सभी संयोजनों के साथ एक तालिका कैसे बनाएं


15

एक्सेल में, मुझे 12 स्थानों के लिए 1 और 0 के सभी संयोजनों के साथ एक तालिका उत्पन्न करने की आवश्यकता है।

1 1 1 1 1 1 1 1 1 1 1 1

0 1 1 1 1 1 1 1 1 1 1 1

0 0 1 1 1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 1 1 1 1 1

और इतने पर और आगे, सभी संयोजनों जैसे कि हो रही है

0 1 0 1 0 1 0 1 0 1 0 1

मैं यह कैसे कर सकता हूँ?


आप एक्सेल के किस संस्करण का उपयोग करते हैं?
माते जुहेज़


1
वह बाइनरी नंबर को एक उच्च-क्रम और कम-क्रम वाले हिस्से में विभाजित कर सकता है, फिर दोनों हिस्सों को एक साथ सिलाई करने के लिए कॉन्टेनेट का उपयोग कर सकता है।
मैं कहता हूं कि मोनिका

8
वांछित आउटपुट के आपके प्रतिनिधित्व से, क्या मैं इसे ले जा सकता हूं कि प्रत्येक अंक एक अलग सेल में होना चाहिए और एक स्ट्रिंग में नहीं?
बाल्ड्रिक

4
भविष्य के संदर्भ के लिए, स्टैक एक्सचेंज पर लोगों को धन्यवाद देने का तरीका उस way बटन का उपयोग कर रहा है। आपके लिए काम करने वाले उत्तर के लिए (और सही परिणाम दिया), उस for बटन का उपयोग करें। यदि एक से अधिक उत्तर काम करते हैं, तो वह चुनें जिसे आप पसंद करते हैं।
wizzwizz4

जवाबों:


27

क्योंकि 2 ^ 12 = 4096, आपको 4096 कोशिकाओं (आपके 12 बिट्स के लिए 12) की आवश्यकता है।

सिद्धांत रूप में, आप इस कमांड में A1 से A4096 तक डाल सकते हैं:

=Right("00000000000" & Dec2Bin(Row()-1),12)

वह यह होगा, लेकिन यह केवल 0 ... 511 (9 बिट्स) के लिए काम करता है। इसलिए हम एक चाल लागू करते हैं: हम संख्या को 3 बिट्स और 9 बिट्स भाग में विभाजित करते हैं और दो स्ट्रिंग्स को अलग-अलग गणना करते हैं, फिर उन्हें समतल करते हैं।

इसलिए आपके पास है:

=RIGHT("00" & DEC2BIN((ROW()-1)/512),3) & RIGHT("00000000" & DEC2BIN(MOD((ROW()-1),512)),9)

संपादित करें: मुझे अंकों के तर्क की वैकल्पिक संख्या के बारे में पता नहीं था। इसका उपयोग यह कार्य देगा:

=DEC2BIN((ROW()-1)/512,3) & DEC2BIN(MOD((ROW()-1),512),9)

इसे A1 से A4096 कोशिकाओं में डालें।

संपादित 2: Lưu Vĩnh Phúc की टिप्पणी के अनुसार, यह संभव है कि ओपी प्रत्येक एक बाइनरी अंक के साथ 12 कॉलम चाहता था। इस मामले में, डाल दिया

=MID( DEC2BIN((ROW()-1)/512,3) & DEC2BIN(MOD((ROW()-1),512),9) ,COL(),1)

सभी कोशिकाओं में A1 से L 4096।


23

बस निम्नलिखित सूत्र को अंदर कॉपी-पेस्ट करें A1:

=MOD(QUOTIENT(ROW()-1,2^(COLUMN()-1)),2)

फिर ड्रैग-फिल तक करें L4096

स्क्रीनशॉट

सूत्र संख्या (n> = 0) के nth बिट को निकालता है: संख्या को 2 ^ n से विभाजित किया जाता है, फिर मापांक 2 की गणना करें।


9

पहले एक मानक मॉड्यूल में निम्नलिखित उपयोगकर्ता परिभाषित फ़ंक्शन दर्ज करें:

Public Function BigBinary(r As Range) As String
    Dim addy As String, s1 As String, s2 As String

    addy = r.Address(0, 0)
    s1 = "=DEC2BIN(INT(A1/2^27),9)&DEC2BIN(INT(MOD(A1,2^27)/2^18),9)&DEC2BIN(INT(MOD(A1,2^18)/2^9),9)&DEC2BIN(MOD(A1,2^9),9)"
    s1 = Replace(s1, "A1", addy)
    s = Evaluate(s1)
    BigBinary = s
End Function

यह 36 "बिट्स" की एक स्ट्रिंग देता है। फिर A1 में दर्ज करें:

=ROW()-1

और A4096 के माध्यम से कॉपी करें

में बी 1 दर्ज करें:

=RIGHT(bigbinary(A1),12)

और B4096 के माध्यम से कॉपी करें :

डेमो

उपयोगकर्ता परिभाषित कार्य (UDFs) स्थापित करने और उपयोग करने के लिए बहुत आसान हैं:

  1. Alt- F11VBE विंडो लाता है
  2. Alt- I, Alt- Mएक ताजा मॉड्यूल खोलता है
  3. सामान पेस्ट करें और VBE विंडो बंद करें

यदि आप कार्यपुस्तिका सहेजते हैं, तो इसके साथ UDF सहेजा जाएगा। यदि आप बाद में 2003 के एक्सेल के संस्करण का उपयोग कर रहे हैं, तो आपको .xlsx के बजाय .xlsm के रूप में फ़ाइल को सहेजना होगा

UDF को हटाने के लिए:

  1. ऊपर के रूप में VBE विंडो लाएं
  2. कोड साफ़ करें
  3. VBE विंडो बंद करें

Excel से UDF का उपयोग करने के लिए:

=myfunction(A1)

सामान्य रूप से मैक्रोज़ के बारे में अधिक जानने के लिए, देखें:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

तथा

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

और UDFs की बारीकियों के लिए, देखें:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

इसके लिए मैक्रोज़ को सक्षम होना चाहिए!


निश्चित रूप से एक ही इस्तेमाल कर सकता है =RIGHT(bigbinary(ROW()-1),12)?
wizzwizz4

@ wizzwizz4 आप सही हैं ... यूडीएफ में
गैरी स्टूडेंट

मैंने केवल मैक्रो पढ़ा है और देखा है कि यह ओवरकिल है - आप बस बॉक्स में सीधे फार्मूला पेस्ट कर सकते हैं फिर सेल के सभी संदर्भों को बदलने के लिए एक्सेल की क्लिक / ड्रैग कार्यक्षमता का उपयोग करें या - बेहतर अभी भी, बस ROW() - 1एक सेल के बजाय उपयोग करें संदर्भ। मैक्रो के साथ एक फ़ाइल में यह ठीक है, लेकिन इसके बिना यह एक चिड़चिड़ा और डरावना दिखने वाला पॉपअप बनाता है।
wizzwizz4

1
@ wizzwizz4 मैंने इस UDF () का उपयोग किया, क्योंकि मेरे पास पहले से ही यह मेरे VBA टूलबॉक्स में था
गैरी के छात्र

3

दूसरा तरीका जो मैंने प्रयोग किया है:

  • से भरें A1को L1शून्य के साथ
  • में A2लिखने=1-A1
  • में B2लिखने=IF( AND( A1=1, A2=0), 1-B1, B1)
  • को कॉपी B2फॉर्मूलाC2:L2
  • A2:L2पंक्तियों को पंक्ति सूत्रों की प्रतिलिपि बनाएँ3:4096

यह क्रम में सभी बाइनरी स्ट्रिंग्स का उत्पादन करता है, पहले स्तंभ पर कम से कम महत्वपूर्ण बिट्स। अंतिम पंक्ति (4096) सभी हैं।

यह निर्भर नहीं करता है ROW()(इसलिए इसे स्वतंत्र रूप से स्थानांतरित किया जा सकता है), आप सीधे लंबाई बढ़ा सकते हैं, और यह गैर-बाइनरी स्ट्रिंग्स को सामान्य करने के लिए स्ट्रैगफोरवर्ड है। यह लिबर ऑफिस Calc के साथ भी काम करता है।


3

1 से 4096 तक की सभी पंक्तियों के लिए ए से लेकर एल तक प्रत्येक सेल में निम्न सूत्र रखें

=IF(MOD(ROW() - 1, 2^(13 - COLUMN())) < 2^(12 - COLUMN()), 0, 1)

यदि आप रिक्त स्थान के साथ एक स्ट्रिंग में पूरी चीज़ चाहते हैं जैसे कि आपने क्या पूछा था, तो इसे अंतिम कॉलम में रखें

=A1 & " " & B1 & " " & C1 & " " & D1 & " " & E1 & " " & F1 & " " & G1 & " " & H1 & " " & I1 & " " & J1 & " " & K1 & " " & L1

फिर सभी पंक्तियों को M4096 तक खींचें

अधिक सामान्य समाधान के लिए, कुछ सेल में बिट्स की संख्या, जैसे कि Z1, या नामित सेल की तरह रखें NumOfBitsऔर निम्न सूत्र का उपयोग करें

=IF(MOD(ROW() - 1, 2^(NumOfBits + 1 - COLUMN())) < 2^(NumOfBits - COLUMN()), 0, 1)

यह पंक्ति और स्तंभ ऑफसेट को बदलकर किसी भी सेल को शुरुआती सेल के रूप में उपयोग करने के लिए आसानी से संशोधित किया जा सकता है

शक्तियों के बजाय बिटवाइज़ संचालन का उपयोग करके अनुकूलित संस्करण:

=IF(BITAND(ROW() - 1, BITLSHIFT(1, 13 - COLUMN()) - 1) < BITLSHIFT(1, 12 - COLUMN()), 0, 1)

=IF(BITAND(ROW() - 1, BITLSHIFT(1, NumOfBits + 1 - COLUMN()) - 1) < BITLSHIFT(1, NumOfBits - COLUMN()), 0, 1)

सबसे त्वरित तरीका:

  • ऊपर दिए गए किसी भी फॉर्मूले की नकल करें
  • प्रेस F5(या Ctrl+ G) और पूरी रेंज का चयन करने के लिए A1: L4096 दर्ज करें
  • F2फिर पेस्ट करने के लिए Ctrl+ दबाएँV
  • प्रेस Ctrl+ Shift+ Enter। बूम। हो गया। खींचने की जरूरत नहीं

यह एक सरणी सूत्र है जो बहुत छोटी फ़ाइल की गणना और निर्माण करने के लिए बहुत तेज़ है


स्पष्टीकरण:

यदि हम ऊपर से नीचे तक पंक्तियों में सभी बाइनरी अभ्यावेदन लिखते हैं, तो nth-bit (lsb से गिनती) का फ़्लिपिंग / टॉगलिंग चक्र 2 n है । प्रत्येक चक्र में पहली छमाही (0 से 2 एन -1 -1) होगी और अंतिम आधी होगी 1. उदाहरण के लिए lsb (दाईं ओर से पहली बिट) हर 2 1-1 = 1 बिट को वैकल्पिक करेगी । दूसरा बिट हर 2 2-1 = 2 बिट्स टॉगल करेगा ...

परिणामस्वरूप हम चक्र में नंबर की वर्तमान स्थिति प्राप्त करने के लिए modulo 2 n लेंगे , यदि यह 2 n-1 से कम है तो यह शून्य बिट है, अन्यथा यह एक है।


1

चूंकि आप जो खोज रहे हैं, वह प्रत्येक 12 अंकों की द्विआधारी संख्या है, जिसका सबसे अच्छा शर्त यह है कि "DEC2BIN" फ़ंक्शन का उपयोग हर नंबर पर 0 से 4095 (2 ^ 12-1) तक किया जाए। दुर्भाग्य से DEC2BIN केवल 8 अंकों तक काम करता है, इसलिए अंतिम सूत्र थोड़ा मुश्किल लगता है क्योंकि यह सहमति का है:

 =DEC2BIN(ROUNDDOWN(A1/256,0),4)&DEC2BIN(A1-256*ROUNDDOWN(A1/256,0), 8)

DEC2BIN कन्वर्ट करने के लिए नंबर लेता है और आपके द्वारा आउटपुट किए जाने वाले अंकों की संख्या। मैंने 4 और 8 को मिलाया। 12. पहले 4 अंकों को उच्चतम मूल्य पर स्थानांतरित करने के लिए मैं 256 (2 ^ 8) से विभाजित करता हूं और अन्य कम मूल्य अंकों की अनदेखी करने के लिए नीचे गोल करता हूं। निम्न मान अंकों के लिए इस मान को घटाएँ ताकि वे 255 पर पिछले गणना जारी रखेंगे।

बाइनरी रूपांतरण और बिट शिफ्टिंग के लिए दशमलव की खोज करें कि यह कैसे काम करता है।


1
@ हैर्ब के उत्तर की तुलना में अच्छी नौकरी "कोड गोल्फिंग" (छोटा पाठ बनाना), हालांकि यह आपको हार्ड-कोड A1 लगता है, जहां वह अधिक लचीली ROW () का उपयोग करता है। वह क्यों कहता है कि यह 511 के माध्यम से काम करता है, लेकिन आप 255 कहते हैं। क्या आप में से एक बंद है, या यह एक्सेल के विभिन्न संस्करणों में अंतर है?
TOOGAM

इसके बजाय ROUNDDOWN(A1/256,0)आप सिर्फ उपयोग कर सकते हैं QUOTIENT(A1, 256), या इससे भी बेहतर BITRSHIFT(A1, 8)। बाद वाले हिस्से को भी बदल दिया जा सकता है BITANDयाMOD
14

-1

एक उत्तर जो डेटा को एक्सेल के बाहर बनाता है, लेकिन एक .csv बनाता है जिसे एक्सेल में टेबल प्राप्त करने के लिए खोला जा सकता है।

यह अजगर का उपयोग करता है, लेकिन एक शेल भाषा में भी किया जा सकता है। बस इसे cmd.exe में चलाएं यदि अजगर स्थापित है।

python -c "for i in range(0,2**12): print (','.join((j for j in '{:b}'.format(i).zfill(12))))" > binary.csv

यह एक फ़ाइल (बाइनरी.एससीवी) बनाता है जिसमें वांछित सामग्री होती है, अलग-अलग कोशिकाओं में प्रत्येक अंक (मुझे लगता है) प्रश्न से वांछित है।

स्पष्टीकरण:

python -c                    < call python passing in a string for the program to run
for i in range(0,2**12):     < for each value from 0 to 12 bits
print (                      < print...
','.join(                    < comma separated...
(j for j in                  < each character from...
'{:b}'.format(i)             < binary representation of current value
.zfill(12))))"               < padded with '0' to length 12
> binary.csv                 < and output to 'binary.csv'

4
मैं नीचे मतदाता नहीं हूं, लेकिन "एक्सेल में, मुझे उत्पन्न करने की आवश्यकता है ..."। यह एक्सेल में नहीं है। एक CSV आयात करना और किसी भी समय आप इसे संशोधित करना चाहते हैं (जैसे / अधिक / कम पंक्तियों) को सही जगह पर कॉपी करना एक दर्द होगा।
टॉम कारपेंटर

यह पाइथन <3 लेकिन> = 2.3 के लिए है। फॉरवर्ड-अनुकूलता के लिए, कृपया कोष्ठक जोड़ें, ताकि printकीवर्ड को एक फ़ंक्शन की तरह कहा जाए - इस तरह यह पायथन 2.3+ और पायथन 3.0.0+ के साथ संगत होगा
wizzwizz4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.