জাভাস্ক্রিপ্টে বাইনারি সংখ্যার উপস্থাপন করার মতো "0 বি" বা অনুরূপ কিছু আছে কি?


130

আমি জানি এটি 0xজাভাস্ক্রিপ্টে হেক্সাডেসিমাল সংখ্যাগুলির জন্য একটি উপসর্গ ix উদাহরণ স্বরূপ,0xFF 255 সংখ্যাটির জন্য দাঁড়িয়েছে।

বাইনারি সংখ্যার জন্য কি অনুরূপ কিছু আছে? আমি 0b1111সংখ্যাটি উপস্থাপনের প্রত্যাশা করব 15, তবে এটি আমার পক্ষে কার্যকর হয় না।


1
কৌতূহলের বাইরে: জাভাস্ক্রিপ্টে আপনার কেন বাইনারি আক্ষরিক প্রয়োজন হবে? জাভাস্ক্রিপ্টের উচ্চ-স্তরের প্রকৃতির অর্থ এটি সাধারণত নিম্ন স্তরের কনস্ট্রাক্টগুলির সাথে বাইনারি আক্ষরিক প্রয়োজনের সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন হয় না।
জোছিম সাউর

19
কারণ এইভাবে কোডটি আরও পঠনযোগ্য হবে। আমার বাস্তবায়ন কিছু নির্দিষ্টকরণের ভিত্তিতে যা বাইনারি সংখ্যা ব্যবহার করে।
মিশা মোরোশকো

5
রোবোটিক্সের জন্য নোড জেএস ব্যবহার করা যেখানে বাইনারি প্রয়োজন হতে পারে তার একটি ভাল উদাহরণ
গ্রেগ উডস

আপনি আরও ভাল পঠনযোগ্যতার জন্য সংখ্যাসূচক বিভাজক ব্যবহার বিবেচনা করতে পারেন । 0b0111_0_1_0_1
Ван

উত্তর:


181

হালনাগাদ:

জাভাস্ক্রিপ্টের আরও নতুন সংস্করণগুলি - বিশেষত ECMAScript 6 - বাইনারি (উপসর্গ 0b), অক্টাল (উপসর্গ 0o) এবং হেক্সাডেসিমাল (উপসর্গ 0x:) সংখ্যাসূচক জন্য সমর্থন যোগ করেছে :

var bin = 0b1111;    // bin will be set to 15
var oct = 0o17;      // oct will be set to 15
var oxx = 017;       // oxx will be set to 15
var hex = 0xF;       // hex will be set to 15
// note: bB oO xX are all valid

এই বৈশিষ্ট্যটি ফায়ারফক্স এবং ক্রোমে ইতিমধ্যে উপলব্ধ। এটি বর্তমানে আইই তে সমর্থিত নয়, তবে স্পার্টান এলে স্পষ্টতই এটি হবে।

(এটি নির্দেশ করার জন্য সেমিকোলনের মন্তব্যে এবং উরিশের জবাবের জন্য ধন্যবাদ ।)

আসল উত্তর:

না, বাইনারি সংখ্যার সমতুল্য নেই। জাভাস্ক্রিপ্ট কেবলমাত্র দশমিক (উপসর্গ নয়), হেক্সাডেসিমাল (উপসর্গ 0x) এবং অষ্টাল (উপসর্গ 0) ফর্ম্যাটে সংখ্যাসূচক অক্ষরগুলিকে সমর্থন করে।

একটি সম্ভাব্য বিকল্প হ'ল parseIntরেডিক্সের সাথে পদ্ধতিতে বাইনারি স্ট্রিং পাস করা :

var foo = parseInt('1111', 2);    // foo will be set to 15

2
@ মিশা মোরোশকো আমি সম্মত, তবে কয়েকটি ভাষার 0bসমর্থন রয়েছে।
আলবা মেন্ডেজ

5
প্রযুক্তিগতভাবে, জাভাস্ক্রিপ্টটিতে অষ্টাল স্বরলিপি বৈশিষ্ট্যযুক্ত নয়, যদিও বেশিরভাগ (সমস্ত?) ব্রাউজারগুলি এটি সমর্থন করে। এটি স্পষ্টভাবে কঠোর মোডে অনুমোদিত নয়।
ডিবেস্টার

5
নোট করুন যে জাভাস্ক্রিপ্টে অভ্যন্তরীণভাবে, প্রতিটি সংখ্যা একটি 64 বিট ফ্লোট, পূর্ণসংখ্যার মতো কোনও জিনিস নেই। সুতরাং বিপুল সংখ্যক সহ, আপনি নির্ভুলতা আলগা করুন। বৃহত্তম নির্ভুল "পূর্ণসংখ্যা" হ'ল 2 ^ 53, বা 9007199254740992.
zupa

5
পূর্ণসংখ্যাগুলি যেহেতু পূর্ণসংখ্যা একটি গণিতের পদ , তাই কোনও নেই int typeএবং integer typeতাই সমস্ত পূর্ণসংখ্যার ভাসা হিসাবে সংরক্ষণ করা হয়।
পারকিনস

3
এই উত্তরটি তখন সত্য ছিল তবে এটি একটি আপডেট ব্যবহার করতে পারে। যেমন ইউরিশ নীচে তার উত্তরে উল্লেখ করেছেন, বাইনারি এবং অষ্টাল সংখ্যার জন্য আক্ষরিক (অষ্টালগুলি এখন "0o1" লেখা আছে) ES6 এ রয়েছে। তারা ইতিমধ্যে ফায়ারফক্স, ক্রোমে এবং এমনকি নতুন আইইয়ের (স্পার্টান) প্রাকদর্শন করেছে।
সেমিকোলন

29

ECMASCript 6 এ ভাষার অংশ হিসাবে এটি সমর্থন করা হবে, অর্থাত্ 0b1111 === 15সত্য। আপনি একটি বড় বি ব্যবহার করতে পারেন (উদা0B1111 ) ।

দেখুন NumericLiteralsES6 ফটকা খেলা


23

আমি জানি যে লোকেরা বলে যে প্রোটোটাইপগুলি প্রসারিত করা ভাল ধারণা নয়, তবে আপনার স্ক্রিপ্ট হতে ...

আমি এটি এইভাবে করি:

Object.defineProperty(Number.prototype, 'b', {set:function(){return false;},get:function(){return parseInt(this, 2);}});

100..b       // returns 4
11111111..b  // returns 511
10..b+1      // returns 3

// and so on

3
এই দুর্দান্ত! 8-) নোট যে ParseInt("101", 2)আসল উত্তর হতে পারে!
অ্যালেক্সিস উইল্কে

20

যদি আপনার প্রাথমিক উদ্বেগ কোডিংয়ের পরিবর্তে প্রদর্শিত হয় তবে আপনি ব্যবহার করতে পারেন এমন একটি অন্তর্নির্মিত রূপান্তর সিস্টেম রয়েছে:

var num = 255;
document.writeln(num.toString(16)); // Outputs: "ff"
document.writeln(num.toString(8)); // Outputs: "377"
document.writeln(num.toString(2)); // Outputs: "11111111"

রেফারেন্স: জাভাস্ক্রিপ্ট নম্বর রেফারেন্স


11

আমি যতদূর জানি জাভাস্ক্রিপ্টে বাইনারি ডোনোটার ব্যবহার করা সম্ভব নয়। আপনার জন্য আমার তিনটি সমাধান রয়েছে, যার সবকটিরই সমস্যা আছে। আমি মনে করি বিকল্প 3 পঠনযোগ্যতার জন্য সর্বাধিক "সুদর্শন", এবং এটি সম্ভবত বাকি সময়ের চেয়ে অনেক দ্রুত - এটি প্রাথমিক রান টাইম ব্যয় ব্যতীত। সমস্যাটি হ'ল এটি কেবল 255 পর্যন্ত মান সমর্থন করে supports

বিকল্প 1: "00001111".b()

String.prototype.b = function() { return parseInt(this,2); }

বিকল্প 2: b("00001111")

function b(i) { if(typeof i=='string') return parseInt(i,2); throw "Expects string"; }

বিকল্প 3: b00001111

এই সংস্করণ আপনাকে 8 ডিজিটের বাইনারি b00000000, 4 ডিজিট b0000এবং ভেরিয়েবল ডিজিট টাইপ করতে দেয় b0। যে b01অবৈধ হয়, তাহলে আপনি ব্যবহার করতে হবে b0001বা b1

String.prototype.lpad = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}
for(var i = 0; i < 256; i++)
    window['b' + i.toString(2)] = window['b' + i.toString(2).lpad('0', 8)] = window['b' + i.toString(2).lpad('0', 4)] = i;

6

হতে পারে এটি কার্যকর হবে:

var bin = 1111;
var dec = parseInt(bin, 2);
// 15

10
কিউট, কিছুটা অদ্ভুত যদি। তবে এটি আপনার জন্য জাভাস্ক্রিপ্ট। binএটি এমন একটি সংখ্যক বরাদ্দ করা হয়েছে যা দেখতে এটি বাইনারি হিসাবে দেখে মনে হচ্ছে তবে এটি বেস বেসকে পার্স করা হচ্ছে 10 parseIntফাংশনটি প্রথম আর্গ হিসাবে একটি স্ট্রিং প্রত্যাশা করে, তাই এটি "1111" (বেস 10 প্রতিনিধিত্ব) এ পরিণত করে, তারপরে আবার পার্স করে যেমন এটি বেস 2 ছিল
টেড হপ্প

2

না, তবে আপনি পার্সেন্ট ব্যবহার করতে পারেন এবং allyচ্ছিকভাবে উদ্ধৃতিগুলি বাদ দিতে পারেন।

parseInt(110, 2); // this is 6 
parseInt("110", 2); // this is also 6

উদ্ধৃতিগুলি বাদ দেওয়ার একমাত্র অসুবিধাটি হ'ল খুব সংখ্যক লোকের জন্য আপনি দ্রুত উপচে পড়বেন:

parseInt(10000000000000000000000, 2); // this gives 1
parseInt("10000000000000000000000", 2); // this gives 4194304

1

বাইনারি স্ট্রিংগুলিকে সংখ্যা এবং ভিসার বিপরীতে রূপান্তর করুন।

var b = function(n) {
    if(typeof n === 'string')
        return parseInt(n, 2);
    else if (typeof n === 'number')
        return n.toString(2);
    throw "unknown input";
};

-1

আমি জানি এটি আসলে জিজ্ঞাসিত প্রশ্নটির উত্তর দেয় না (যা ইতিমধ্যে বেশ কয়েকবার উত্তর দেওয়া হয়েছিল) তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি (বা এই বিষয়ে আগ্রহী অন্যরা) এই বিষয়টি বিবেচনা করুন যে সর্বাধিক পঠনযোগ্য এবং পিছনের দিক / ভবিষ্যত / ক্রস ব্রাউজার-সামঞ্জস্যপূর্ণ উপায় হেক্স উপস্থাপনা ব্যবহার করা হবে।

কিউ এর বাক্য গঠন থেকে মনে হবে যে আপনি কেবল আপনার কোডে বাইনারি আক্ষরিক ব্যবহার করার বিষয়ে এবং সংখ্যাসূচক মানগুলির বাইনারি উপস্থাপনের প্রক্রিয়াজাতকরণের বিষয়ে কথা বলছেন না (যার জন্য প্যারস্ট্যান্ট যাবার উপায়)।

আমি সন্দেহ করি যে এমন অনেক প্রোগ্রামার রয়েছে যাদের বাইনারি নম্বরগুলি পরিচালনা করতে হবে যা 0-এফ থেকে 0000-1111 এর ম্যাপিংয়ের সাথে পরিচিত নয়। সুতরাং মূলত চারটি গ্রুপ তৈরি করুন এবং হেক্স স্বরলিপি ব্যবহার করুন।

সুতরাং 101000000010 লেখার পরিবর্তে আপনি 0xA02 ব্যবহার করবেন যার ঠিক একই অর্থ রয়েছে এবং এটি আরও বেশি পঠনযোগ্য এবং ত্রুটির সম্ভাবনা কম রয়েছে।

কেবল পঠনযোগ্যতা বিবেচনা করুন, এর মধ্যে কোনটি বড় তা তুলনা করার চেষ্টা করুন:
10001000000010010 বা 1001000000010010

এবং আমি যদি তাদের মতো এটি লিখি তবে কী হবে:
0x11012 বা 0x9012


-3
// Conversion function
function bin(nb)
{
    return parseInt(nb.toString(2));
}

// Test
var stop = false;
while(!stop)
{
    var n = parseInt(prompt("Type a decimal number : "));
    alert(bin(n));

    var str = prompt("Retry ? Y / N");
    if(str === "N") { stop = true; }
}

parseInt (দ্বিতীয় প্যারামিটার ছাড়াই) বাইনারি স্ট্রিংটিকে একটি বেস 10 নম্বরে রূপান্তর করে! উদাহরণস্বরূপ 0 বি 100 (4) 100 হয়ে যায় এবং তারপরে সতর্কতার দ্বারা কোনও স্ট্রিংয়ে ফিরে আসে!
টম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.