मैं जावास्क्रिप्ट में एक पूर्णांक को बाइनरी में कैसे बदलूं?


299

मैं बाइनरी में पॉजिटिव या निगेटिव देखना चाहूंगा।

बल्कि इस सवाल की तरह , लेकिन जावास्क्रिप्ट के लिए।


2
a.toString (2) के उदाहरण -1 के लिए काम करने के लिए प्रतीत नहीं होते हैं
बारलोप

1
बाइनरी से दशमलव में बदलना भी संभव है: stackoverflow.com/questions/11103487/…
एंडरसन ग्रीन

और जब मैंने "बाइनरी में" कहा, तो यह थोड़ा अस्पष्ट हो सकता है। मेरा मतलब है आंतरिक बिट स्ट्रिंग प्रतिनिधित्व, जो 2 एस पूरक है, इसलिए सकारात्मक संख्या 2 आधार में होगी, और एक अग्रणी 0 के साथ, (और ऋणात्मक संख्या माइनस प्रतीक के साथ या साइन परिमाण प्रतिनिधित्व के साथ नहीं लिखी जाएगी, लेकिन एक के रूप में उनके सकारात्मक eqivalent का कार्य)
बार्लोप

जवाबों:


498
function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

dec2bin(1);    // 1
dec2bin(-1);   // 11111111111111111111111111111111
dec2bin(256);  // 100000000
dec2bin(-256); // 11111111111111111111111100000000

आप Number.toString(2)फ़ंक्शन का उपयोग कर सकते हैं , लेकिन नकारात्मक संख्याओं का प्रतिनिधित्व करते समय इसमें कुछ समस्याएं हैं। उदाहरण के लिए, (-1).toString(2)आउटपुट है "-1"

इस समस्या को ठीक करने के लिए, आप अहस्ताक्षरित दाईं ओर बिटवाइज़ ऑपरेटर का उपयोग कर सकते हैं (>>> अपने नंबर को एक अहस्ताक्षरित पूर्णांक में ले जाने के ) का ।

यदि आप चलाते (-1 >>> 0).toString(2)हैं तो आप अपने नंबर 0 बिट्स को दाईं ओर शिफ्ट कर देंगे, जो नंबर को खुद नहीं बदलता है लेकिन इसे एक अहस्ताक्षरित पूर्णांक के रूप में दर्शाया जाएगा। उपरोक्त कोड "11111111111111111111111111111111"सही ढंग से आउटपुट करेगा ।

इस सवाल का और स्पष्टीकरण है।

-3 >>> 0 (राइट लॉजिकल शिफ्ट) अहस्ताक्षरित पूर्णांकों के लिए अपने तर्क प्रस्तुत करता है, यही कारण है कि आपको -3 के 32-बिट दो का पूरक प्रतिनिधित्व मिलता है।


7
यहाँ स्पष्टीकरण है
फर्नान्डोसावियो

जब से मैंने जावास्क्रिप्ट की कोशिश की है, लेकिन इसे यहाँ आज़मा रहा हूँ w3schools.com/js/tryit.asp?filename=tryjs_output_alert इस <script> window.alert ((- 3 :> 0) .toString (2)) के साथ; </ script> हाँ, यह काम किया
बारलोप

1
.String (2) काम नहीं करता क्योंकि आपको टेक्स्ट से इनपुट मिल रहा है। इसका उपयोग करें: फ़ंक्शन decToBase (dec, base) {रिटर्न parseInt (dec) .toString (बेस); } चेतावनी (decToBase (dec, 2));
मगस

आप मान रहे हैं कि इनपुट पाठ है, लेकिन उत्तर में फ़ंक्शन एक पूर्णांक की अपेक्षा करता है ... इसलिए, यदि इनपुट एक पाठ है, तो इसे केवल पूर्णांक में रूपांतरित करें, नकली बिटशिफ्ट का उपयोग करें और यह किया गया है
फर्नान्दोसावियो

@ मैगस जो पाठ से इनपुट प्राप्त कर रहा है ?!
बार्लोप

207

प्रयत्न

num.toString(2);

2 मूलांक है और 2 और 36 के बीच कोई भी आधार हो सकता है

स्रोत यहाँ

अपडेट करें:

यह केवल सकारात्मक संख्याओं के लिए काम करेगा, जावास्क्रिप्ट दो-पूरक पूरक में नकारात्मक बाइनरी पूर्णांक का प्रतिनिधित्व करता है। मैंने इस छोटे से कार्य को किया, जो कि चाल को करना चाहिए, मैंने इसे ठीक से जांच नहीं किया है:

function dec2Bin(dec)
{
    if(dec >= 0) {
        return dec.toString(2);
    }
    else {
        /* Here you could represent the number in 2s compliment but this is not what 
           JS uses as its not sure how many bits are in your number range. There are 
           some suggestions /programming/10936600/javascript-decimal-to-binary-64-bit 
        */
        return (~dec).toString(2);
    }
}

मुझे यहां से कुछ मदद मिली थी


-1 के लिए काम नहीं करता है। एक = -1; document.write (संख्या (a.toString (2))); प्रदर्शित करता है -1
barlop

अद्यतन अभी भी नकारात्मक संख्याओं ( -3रिटर्न 1) के लिए काम नहीं करता है । इसके अलावा मुझे लगता है कि dec > 0होना चाहिए dec >= 0, जो चाहिए कम से कम ठीक 0. पर क्योंकि dec2Bin(0)रिटर्न 10
एडम मेरिफिल्ड

उपरोक्त टिप्पणियों में दोनों मामले मेरे क्रोम कंसोल में सही परिणाम देते हैं - var a = -1; a.toString (2); "-1" var a = -3; a.toString (2); "-11"
अनमोल सराफ

@AnmolSaraf मैं देखता हूं कि आपका क्या मतलब है, और बोलचाल के समय जब लोग कहते हैं कि दशमलव में -5 क्या है, और इसका उत्तर है -5 जब यह द्विआधारी में ऋणात्मक संख्याओं की बात आती है, तो एक अर्थ में हाँ आप एक शून्य चिह्न को छड़ी कर सकते हैं, यह वहाँ 5 है। 101 और -5 -101 है, लेकिन चूंकि कंप्यूटर माइनस साइन्स को स्टोर नहीं करते हैं, वे सिर्फ 1s और 0s को दर्शाते हैं, इसलिए जब हम बाइनरी में नेगेटिव नंबर कहते हैं, तो हम वास्तव में 1s और 0s में नेगेटिव नंबर (माइनस साइन शामिल) डालते हैं। कुछ तरीकों में 1s पूरक, 2s पूरक और 'संकेत और परिमाण' शामिल हैं। तो -101010101 या -0101010 बाइनरी में एक नकारात्मक संख्या से लोगों को क्या मतलब नहीं है।
बार्लोप

यह लिंक कुछ stackoverflow.com/questions/12337360/… के लिए ब्याज की हो सकती है , किसी भी तरह, आपका उत्तर स्वयं विरोधाभासी है, आप लिखते हैं "जावास्क्रिप्ट दो-पूरक पूरक अंकन में नकारात्मक बाइनरी पूर्णांक का प्रतिनिधित्व करता है।" और आपका कोड कहता है, "यहां आप 2s तारीफ में संख्या का प्रतिनिधित्व कर सकते हैं, लेकिन यह वह नहीं है जो जेएस [बकवास कारण] के रूप में उपयोग करता है" और आप कोई संदर्भ भी नहीं देते हैं।
बार्लोप 12

53

बाइनरी 'बाइनरी में कन्वर्ट' तीन मुख्य बातों को संदर्भित कर सकता है। स्थितीय संख्या प्रणाली, स्मृति या 32 बिट बिटस्ट्रिंग्स में द्विआधारी प्रतिनिधित्व। (64 बिट बिटस्ट्रिंग के लिए पैट्रिक रॉबर्ट्स का जवाब देखें )

1. संख्या प्रणाली

(123456).toString(2)संख्याओं को बेस 2 स्थितीय अंकीय प्रणाली में बदल देगा । इस प्रणाली में दशमलव की तरह ऋणात्मक चिन्हों के साथ ऋणात्मक संख्याएँ लिखी जाती हैं।

2. आंतरिक प्रतिनिधित्व

संख्याओं का आंतरिक प्रतिनिधित्व 64 बिट फ्लोटिंग पॉइंट है और इस उत्तर में कुछ सीमाओं पर चर्चा की जाती है । जावास्क्रिप्ट में इस का एक बिट-स्ट्रिंग प्रतिनिधित्व बनाने का कोई आसान तरीका नहीं है और न ही विशिष्ट बिट्स तक पहुंच है।

3. मास्क और बिटवाइज ऑपरेटर

एमडीएन का एक अच्छा अवलोकन है कि बिटवाइज़ ऑपरेटर कैसे काम करते हैं। महत्वपूर्ण बात यह है:

बिटवाइज़ ऑपरेटर अपने ऑपरेंड को 32 बिट्स (शून्य और वाले) के अनुक्रम के रूप में मानते हैं

ऑपरेशन से पहले 64 बिट फ़्लोटिंग पॉइंट संख्या 32 बिट हस्ताक्षरित पूर्णांक पर डाली जाती है। के बाद वे वापस परिवर्तित कर रहे हैं।

यहां 32-बिट स्ट्रिंग्स में संख्याओं को परिवर्तित करने के लिए एमडीएन उदाहरण कोड है।

function createBinaryString (nMask) {
  // nMask must be between -2147483648 and 2147483647
  for (var nFlag = 0, nShifted = nMask, sMask = ""; nFlag < 32;
       nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1);
  return sMask;
}

createBinaryString(0) //-> "00000000000000000000000000000000"
createBinaryString(123) //-> "00000000000000000000000001111011"
createBinaryString(-1) //-> "11111111111111111111111111111111"
createBinaryString(-1123456) //-> "11111111111011101101101110000000"
createBinaryString(0x7fffffff) //-> "01111111111111111111111111111111"

एक साधारण संख्या (संख्या) .toString (2) का उपयोग करने के बजाय इस फ़ंक्शन का उपयोग करने का क्या फायदा है?
मगस

5
@ मैगस मुझे लगता है कि मैं अंक और बाइनरी स्ट्रिंग्स के बीच अंतर को पर्याप्त रूप से समझाता हूं। एक 32 बिट बाइनरी स्ट्रिंग में हमेशा बत्तीस अक्षर होते हैं, जिसमें "1" s और "0" s शामिल होते हैं। दिए गए आधार के साथ स्थितीय संख्या प्रणाली का उपयोग करते हुए एक वास्तविक संख्या का प्रतिनिधित्व करता है। यह निर्भर करता है कि आप स्ट्रिंग क्यों चाहते हैं, उनके बहुत अलग अर्थ हैं।
अन्नपूर्णे

क्षमा करें, आप सही हैं। मैं सीधे कोड पर कूद गया।
मगस

1
अन्य पोस्ट किए गए तरीकों (विशेष रूप से इस संख्या 536870912 पर, दो प्रमुख शून्य हटा दिए जाते हैं) का उपयोग करके अग्रणी 0s के साथ एक समस्या थी, लेकिन इस समाधान ने इसे सही तरीके से संभाला।
UberMouse

@UberMouse हाँ >>> अग्रणी 0s मुद्दा है, मैं इसे स्वीकार करता हूँ।
बार्लोप

43

बस एक आसान तरीका है ...

Number(42).toString(2);

// "101010"

24
मैं पसंद करूंगा(42).toString(2)
विलेम डी'हेसलेर

33
या उससे भी कम42..toString(2)
kapex

9
इससे लोग जूझ रहे हैं। उत्तर सही है क्योंकि यह इनपुट (42) को एक पूर्णांक में डालता है और उस लाइन की आवश्यकता होती है। यदि आप एक पाठ इनपुट से अपना 'नंबर' प्राप्त करते हैं तो (2) काम नहीं करेगा।
Magus

4
@ कप्पे, यार कि प्रतिभा है। आपको उसके बारे में कैसे पता चला?
पचेरियर

2
@BatuG। संख्याओं के लिए सिंटैक्स आपको दशमलव विभाजक के बाद भाग को छोड़ देने की अनुमति देता है। आप लिख सकते हैं 1.कि जो जैसा है वैसा ही 1.0या 1(और इसी तरह आप पहले वाले हिस्से को भी छोड़ सकते हैं और .5इसके बजाय लिख सकते हैं 0.5)। इसलिए उदाहरण में पहला डॉट दशमलव विभाजक है जो संख्या का हिस्सा है और दूसरा डॉट उस नंबर पर विधि को कॉल करने के लिए डॉट ऑपरेटर है। आपको दो डॉट्स का उपयोग करना होगा (या कोष्ठक में संख्या को लपेटना होगा) और केवल 42.toString(2)इसलिए नहीं लिख सकते क्योंकि पार्सर डॉट को दशमलव विभाजक के रूप में देखता है और एक लापता डॉट ऑपरेटर के कारण त्रुटि फेंकता है।
kapex

30

यह उत्तर 2147483648 10 (2 31 ) - 9007199254740991 10 (2 53 -1) की सीमा में निरपेक्ष मान के साथ इनपुट को संबोधित करने का प्रयास करता है ।


जावास्क्रिप्ट में, संख्या में जमा हो जाती है 64-बिट चल बिन्दु प्रतिनिधित्व है, लेकिन 32-बिट पूर्णांक के लिए बिटवाइज़ संचालन विवश उन्हें में दो के पूरक प्रारूप , इसलिए किसी भी दृष्टिकोण है जो बिटवाइज़ संचालन का उपयोग करता -२१४७४८३६४८ के उत्पादन की सीमा को प्रतिबंधित करता है 10 (-2 31 ) - 2147483647 10 (2 31) -1)।

हालाँकि, अगर बिटवाइज़ ऑपरेशंस से बचा जाता है और केवल गणितीय परिचालनों का उपयोग करके 64-बिट फ़्लोटिंग पॉइंट प्रतिनिधित्व को संरक्षित किया जाता है, तो हम 53-बिट को साइन-अप करके 64-बिट दो के पूरक बाइनरी नोटेशन को किसी भी सुरक्षित पूर्णांक में परिवर्तित कर सकते हैं twosComplement:

function toBinary (value) {
  if (!Number.isSafeInteger(value)) {
    throw new TypeError('value must be a safe integer');
  }

  const negative = value < 0;
  const twosComplement = negative ? Number.MAX_SAFE_INTEGER + value + 1 : value;
  const signExtend = negative ? '1' : '0';

  return twosComplement.toString(2).padStart(53, '0').padStart(64, signExtend);
}

function format (value) {
  console.log(value.toString().padStart(64));
  console.log(value.toString(2).padStart(64));
  console.log(toBinary(value));
}

format(8);
format(-8);
format(2**33-1);
format(-(2**33-1));
format(2**53-1);
format(-(2**53-1));
format(2**52);
format(-(2**52));
format(2**52+1);
format(-(2**52+1));
.as-console-wrapper{max-height:100%!important}

पुराने ब्राउज़रों के लिए, पॉलीफ़िल निम्नलिखित कार्यों और मूल्यों के लिए मौजूद हैं:

एक अतिरिक्त बोनस के रूप में, आप किसी भी मूलांक (2–36) का समर्थन कर सकते हैं यदि आप ( 64 / log 2 (मूलांक) के नकारात्मक अंकों के लिए दो पूरक रूपांतरण का उपयोग करके करते हैं BigInt:

function toRadix (value, radix) {
  if (!Number.isSafeInteger(value)) {
    throw new TypeError('value must be a safe integer');
  }

  const digits = Math.ceil(64 / Math.log2(radix));
  const twosComplement = value < 0
    ? BigInt(radix) ** BigInt(digits) + BigInt(value)
    : value;

  return twosComplement.toString(radix).padStart(digits, '0');
}

console.log(toRadix(0xcba9876543210, 2));
console.log(toRadix(-0xcba9876543210, 2));
console.log(toRadix(0xcba9876543210, 16));
console.log(toRadix(-0xcba9876543210, 16));
console.log(toRadix(0x1032547698bac, 2));
console.log(toRadix(-0x1032547698bac, 2));
console.log(toRadix(0x1032547698bac, 16));
console.log(toRadix(-0x1032547698bac, 16));
.as-console-wrapper{max-height:100%!important}

यदि आप मेरे पुराने उत्तर में रुचि रखते हैं ArrayBufferजो a Float64Arrayऔर a के बीच एक संघ बनाने के लिए उपयोग करते हैं Uint16Array, तो कृपया इस उत्तर के संशोधन इतिहास को देखें


धन्यवाद, यह अच्छा है कि यह 64 बिट के लिए काम करता है .. क्या आप मुझे एनान के जवाब पर इस जवाब के किसी भी लाभ को बता सकते हैं?
21

2
बहुत बड़ी रेंज? यह सिर्फ ऐनान के जवाब को पसंद -(2**53)-1करने के 2**53-1बजाय काम करता है । -(2**31)2**31-1
पैट्रिक रॉबर्ट्स

हाँ, यह एक बड़ा लाभ है, मुझे वह मिलता है, और वह करेगा, हालांकि यह थोड़ा अधिक कोड है, लेकिन मेरा मतलब क्या था, अगर मैं किसी अन्य फायदे के लिए उत्सुक हूं?
बार्लोप

1
2 ** 32 + 1 से, अंतिम (सबसे दाहिना) बिट साफ किया जाता है जब इसे सेट किया जाना चाहिए।
लोवरो

1
काम करता है जब लाइन है: var घातांक = ((uint16 [3] & 0x7FF0) >> 4) - 1023/1;
लोवरो

15

एक समाधान जो मुझे 32-बिट के लिए ठीक है, के साथ जाना होगा, इस उत्तर का कोड है, जो developer.mozilla.org (MDN) से है, लेकिन A (स्वरूपण और B) के लिए जोड़ी गई कुछ पंक्तियों के साथ जाँच कर रहा है कि संख्या सीमा में है।

कुछ ने सुझाव दिया x.toString(2) कि जो नकारात्मक के लिए काम नहीं करता है, यह सिर्फ उनके लिए वहाँ एक शून्य साइन चिपक जाता है, जो अच्छा नहीं है।

फर्नांडो ने एक सरल समाधान का उल्लेख किया (x>>>0).toString(2); जो नकारात्मक के लिए ठीक है, लेकिन जब एक्स पॉजिटिव होता है, तो थोड़ा सा मुद्दा होता है। इसमें 1 से शुरू होने वाला आउटपुट है, जो सकारात्मक संख्याओं के लिए उचित 2s पूरक नहीं है।

कोई भी व्यक्ति जो 0 से शुरू होने वाले सकारात्मक संख्याओं के तथ्य को नहीं समझता है और 1s पूरक में 1 के साथ ऋणात्मक संख्याओं को 2 एस पूरक पर इस SO QnA की जांच कर सकता है। "2 का पूरक" क्या है?

एक समाधान में सकारात्मक संख्याओं के लिए 0 को शामिल करना शामिल हो सकता है, जो मैंने इस उत्तर के पहले संशोधन में किया था। और एक कभी-कभी एक 33bit नंबर होने को स्वीकार कर सकता है, या कोई यह सुनिश्चित कर सकता है कि रूपांतरण करने वाली संख्या सीमा के भीतर है - (2 ^ 31) <= x <2 ^ 31-1। तो संख्या हमेशा 32 बिट है। लेकिन ऐसा करने के बजाय, आप इस समाधान के साथ mozilla.org पर जा सकते हैं

पैट्रिक का जवाब और कोड लंबा है और जाहिरा तौर पर 64-बिट के लिए काम करता है, लेकिन एक बग था जो एक टिप्पणीकार को मिला, और टिप्पणीकार ने पैट्रिक की बग को तय किया, लेकिन पैट्रिक के पास अपने कोड में कुछ "मैजिक नंबर" हैं जिनके बारे में उन्होंने टिप्पणी नहीं की है और है के बारे में भूल गया और पेट्रिक अब पूरी तरह से अपने स्वयं के कोड को समझता है / यह क्यों काम करता है।

अन्नान के पास कुछ गलत और अस्पष्ट शब्दावली थी, लेकिन डेवलपर द्वारा एक समाधान का उल्लेख किया गया ।.org https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Outators यह 32-बिट संख्याओं के लिए काम करता है।

कोड बहुत कॉम्पैक्ट है, तीन लाइनों का एक फ़ंक्शन है।

लेकिन मैंने 8 बिट के समूह में आउटपुट को प्रारूपित करने के लिए एक रेगेक्स जोड़ा है। जावास्क्रिप्ट में हजारों विभाजकों के रूप में अल्पविराम के साथ एक संख्या को कैसे प्रिंट करें (मैं इसे 3 एस में दाएं से बाएं में जोड़कर और अल्पविराम जोड़कर , 8 से दाएं से बाएं में समूहीकरण करने और रिक्त स्थान जोड़ने के आधार पर मुद्रित करता हूं )

और, जबकि मोज़िला ने nMask के आकार (में खिलाए गए नंबर) के बारे में एक टिप्पणी की .. कि इसे रेंज में होना है, उन्होंने नंबर के सीमा से बाहर होने पर त्रुटि का परीक्षण नहीं किया या फेंक दिया, इसलिए मैंने कहा कि जोड़ा गया।

मुझे यकीन नहीं है कि उन्होंने अपने पैरामीटर का नाम 'nMask' क्यों रखा, लेकिन मैं इसे छोड़ दूंगा।

संदर्भ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

function createBinaryString(nMask) {
  // nMask must be between -2147483648 and 2147483647
  if (nMask > 2**31-1) 
     throw "number too large. number shouldn't be > 2**31-1"; //added
  if (nMask < -1*(2**31))
     throw "number too far negative, number shouldn't be < 2**31" //added
  for (var nFlag = 0, nShifted = nMask, sMask = ''; nFlag < 32;
       nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1);
  sMask=sMask.replace(/\B(?=(.{8})+(?!.))/g, " ") // added
  return sMask;
}


console.log(createBinaryString(-1))    // "11111111 11111111 11111111 11111111"
console.log(createBinaryString(1024))  // "00000000 00000000 00000100 00000000"
console.log(createBinaryString(-2))    // "11111111 11111111 11111111 11111110"
console.log(createBinaryString(-1024)) // "11111111 11111111 11111100 00000000"


8

आप अपना स्वयं का फ़ंक्शन लिख सकते हैं जो बिट्स की एक सरणी देता है। उदाहरण संख्याओं को बिट्स में बदलने का तरीका

भाजक | लाभांश | बिट्स / शेष

2 | 9 | 1

2 | 4 | 0

2 | 2 | 0

~ | 1 | ~

उपरोक्त पंक्ति का उदाहरण: २ * ४ = 2 और शेष १ तो ९ = १ ० ० १ है

function numToBit(num){
    var number = num
    var result = []
    while(number >= 1 ){
        result.unshift(Math.floor(number%2))
        number = number/2
    }
    return result
}

नीचे से ऊपर तक रीडर्स रखें। अंक 1 मध्य से शीर्ष पर।


1
Btw, तुम Math.floor(number%2)इसके बजाय क्यों number = Math.floor(number/2)?
पचेरियर

1
कारण नंबर 2 है संख्या 2 / के बराबर नहीं है। हम शेष भागफल में रुचि रखते हैं ।
सुप्रीतशाह १२

0

मैंने कुछ ऐसा करने के लिए एक अलग दृष्टिकोण का उपयोग किया जो ऐसा करता है। मैंने अपनी परियोजना में इस कोड का उपयोग नहीं करने का फैसला किया है, लेकिन मुझे लगा कि मैं इसे किसी व्यक्ति के लिए उपयोगी होने की स्थिति में कहीं और छोड़ दूंगा।

  • बिट-शिफ्टिंग या दो के पूरक जबरदस्ती का उपयोग नहीं करता है।
  • आप उन बिट की संख्या चुनते हैं जो बाहर आती हैं (यह '8', '16', '32' के वैध मानों की जाँच करता है, लेकिन मुझे लगता है कि आप इसे बदल सकते हैं)
  • आप इसे एक हस्ताक्षरित या अहस्ताक्षरित पूर्णांक के रूप में मानते हैं या नहीं।
  • यह हस्ताक्षरित / अहस्ताक्षरित और बिट की संख्या के संयोजन को देखते हुए श्रेणी के मुद्दों की जांच करेगा, हालांकि आप त्रुटि से निपटने में सुधार करना चाहते हैं।
  • इसमें फ़ंक्शन का "रिवर्स" संस्करण भी है जो बिट्स को इंट में वापस कनवर्ट करता है। आपको इसकी आवश्यकता होगी कि चूंकि इस आउटपुट की व्याख्या करने के लिए शायद कुछ और नहीं है: डी

function intToBitString(input, size, unsigned) {
	if ([8, 16, 32].indexOf(size) == -1) {
		throw "invalid params";
	}
	var min = unsigned ? 0 : - (2 ** size / 2);
        var limit = unsigned ? 2 ** size : 2 ** size / 2;
	if (!Number.isInteger(input) || input < min || input >= limit) {
		throw "out of range or not an int";
	}
	if (!unsigned) {
		input += limit;
	}
	var binary = input.toString(2).replace(/^-/, '');
	return binary.padStart(size, '0');
}

function bitStringToInt(input, size, unsigned) {
	if ([8, 16, 32].indexOf(size) == -1) {
		throw "invalid params";
	}
	input = parseInt(input, 2);
	if (!unsigned) {
		input -= 2 ** size / 2;
	}
	return input;
}


// EXAMPLES

var res;
console.log("(uint8)10");
res = intToBitString(10, 8, true);
console.log("intToBitString(res, 8, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, true));
console.log("---");

console.log("(uint8)127");
res = intToBitString(127, 8, true);
console.log("intToBitString(res, 8, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, true));
console.log("---");

console.log("(int8)127");
res = intToBitString(127, 8, false);
console.log("intToBitString(res, 8, false)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, false));
console.log("---");

console.log("(int8)-128");
res = intToBitString(-128, 8, false);
console.log("intToBitString(res, 8, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 8, true));
console.log("---");

console.log("(uint16)5000");
res = intToBitString(5000, 16, true);
console.log("intToBitString(res, 16, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 16, true));
console.log("---");

console.log("(uint32)5000");
res = intToBitString(5000, 32, true);
console.log("intToBitString(res, 32, true)");
console.log(res);
console.log("reverse:", bitStringToInt(res, 32, true));
console.log("---");


-1

एक और विकल्प

const decToBin = dec => {
  let bin = '';
  let f = false;

  while (!f) {
    bin = bin + (dec % 2);    
    dec = Math.trunc(dec / 2);  

    if (dec === 0 ) f = true;
  }

  return bin.split("").reverse().join("");
}

console.log(decToBin(0));
console.log(decToBin(1));
console.log(decToBin(2));
console.log(decToBin(3));
console.log(decToBin(4));
console.log(decToBin(5));
console.log(decToBin(6));

कृपया विन्सेन्ट का उत्तर और उस पर टिप्पणी देखें, यह आपकी पोस्टिंग पर भी लागू होगा
बार्लॉप

यह वह है जो असहमति के बिना, और दूसरों से कुछ समझौते के साथ, उसके जवाब पर टिप्पणी में पोस्ट किया गया था, "यह कंप्यूटर विज्ञान का अध्ययन करने के लिए उपयोगी हो सकता है कि इसे मैन्युअल रूप से कैसे किया जाए, ताकि खुद को पढ़ाया जा सके, लेकिन यह वह नहीं है जो मैं पूछ रहा हूँ! यदि आप इस तरह से मैन्युअल रूप से कर रहे पहिये को फिर से मजबूत करने जा रहे हैं, तो इसे कम से कम दक्षता में वृद्धि के साथ या कुछ लाभ जैसे मूल्यों के आकार में वृद्धि के साथ सामना करना पड़ सकता है। आप से कोई भी चर्चा वहाँ किसी भी तरह के लाभ को बताते हुए। ”
बार्लोप

इसके अलावा, आपका समाधान पूरी तरह से विफल रहता है, यह सकारात्मक संख्याओं को 1 से शुरू करता है और नकारात्मक संख्याओं के लिए पूरी तरह से विफल रहता है, और मेरे प्रश्न का उल्लेख सकारात्मक या नकारात्मक है
बार्लॉप

इसलिए आपका "उत्तर" कई स्तरों पर गलत है। और आपको उत्तर पोस्ट करने से पहले हमेशा अन्य उत्तरों की समीक्षा करनी चाहिए
बार्लॉप

-2

यह मेरा कोड है:

var x = prompt("enter number", "7");
var i = 0;
var binaryvar = " ";

function add(n) {
    if (n == 0) {
        binaryvar = "0" + binaryvar; 
    }
    else {
        binaryvar = "1" + binaryvar;
    }
}

function binary() {
    while (i < 1) {
        if (x == 1) {
            add(1);
            document.write(binaryvar);
            break;
        }
        else {
            if (x % 2 == 0) {
                x = x / 2;
                add(0);
            }
            else {
                x = (x - 1) / 2;
                add(1);
            }
        }
    }
}

binary();

3
यह कंप्यूटर विज्ञान का अध्ययन करने के लिए उपयोगी हो सकता है यह देखने के लिए कि इसे मैन्युअल रूप से कैसे किया जाए, ताकि खुद को पढ़ाने के लिए, लेकिन यह वह नहीं है जो मैं पूछ रहा हूं! यदि आप उस तरह से मैन्युअल रूप से कर रहे पहिये को सुदृढ़ करने जा रहे हैं, तो यह कम से कम बढ़ी हुई दक्षता के लाभ के साथ होना चाहिए या कुछ लाभ जैसे मूल्यों के आकार में वृद्धि हो सकती है। मुझे आपसे कोई चर्चा नहीं दिखती है, ऐसे किसी भी लाभ को बताते हुए।
बार्लॉप

-3

इसका उपाय है। तथ्य की बात के रूप में यह काफी सरल है

function binaries(num1){ 
        var str = num1.toString(2)
        return(console.log('The binary form of ' + num1 + ' is: ' + str))
     }
     binaries(3

)

        /*
         According to MDN, Number.prototype.toString() overrides 
         Object.prototype.toString() with the useful distinction that you can 
         pass in a single integer argument. This argument is an optional radix, 
         numbers 2 to 36 allowed.So in the example above, we’re passing in 2 to 
         get a string representation of the binary for the base 10 number 100, 
         i.e. 1100100.
        */

1
उस समाधान को पहले से ही कई बार प्रस्तावित किया गया है और, जैसा कि ओपी ने पहले ही मार्च 30 '12 पर 9:01 पर टिप्पणी की है, नकारात्मक संख्याओं के लिए काम नहीं करता है।
एड्रियन डब्ल्यू

@ एड्रियनव मैं इसे डाउनवोट करने का सुझाव देता हूं। मैं तुम्हें नोटिस नहीं किया है। क्या यह आप के लिए एक जवाब नीचा दिखाने के लिए लेता है ?!
बार्लोप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.