Tôi biết đó 0xlà tiền tố cho các số thập lục phân trong Javascript. Ví dụ: 0xFFviết tắt của số 255.
Có một cái gì đó tương tự cho số nhị phân? Tôi hy vọng 0b1111sẽ đại diện cho số 15, nhưng điều này không làm việc cho tôi.
0b0111_0_1_0_1.
Tôi biết đó 0xlà tiền tố cho các số thập lục phân trong Javascript. Ví dụ: 0xFFviết tắt của số 255.
Có một cái gì đó tương tự cho số nhị phân? Tôi hy vọng 0b1111sẽ đại diện cho số 15, nhưng điều này không làm việc cho tôi.
0b0111_0_1_0_1.
Câu trả lời:
Cập nhật:
Các phiên bản mới hơn của JavaScript - cụ thể là ECMAScript 6 - đã thêm hỗ trợ cho nhị phân (tiền tố 0b), bát phân (tiền tố 0o) và thập lục phân (tiền tố 0x:) chữ số:
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
Tính năng này đã có sẵn trong Firefox và Chrome. Nó hiện không được hỗ trợ trong IE, nhưng rõ ràng sẽ là khi Spartan đến.
(Cảm ơn bình luận của Semicolon và câu trả lời của Urish vì đã chỉ ra điều này.)
Câu trả lời gốc:
Không, không có số tương đương cho số nhị phân. JavaScript chỉ hỗ trợ các chữ số ở dạng thập phân (không có tiền tố), thập lục phân (tiền tố 0x) và bát phân (tiền tố0 ).
Một cách khác có thể là truyền một chuỗi nhị phân cho parseIntphương thức cùng với cơ số:
var foo = parseInt('1111', 2); // foo will be set to 15
0bhỗ trợ.
int typekhông integer type, vì vậy tất cả các số nguyên được lưu trữ như nổi.
Tôi biết rằng mọi người nói rằng việc mở rộng các nguyên mẫu không phải là một ý tưởng hay, nhưng là kịch bản của bạn ...
Tôi làm theo cách này:
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
ParseInt("101", 2)có thể là câu trả lời thực tế!
Nếu mối quan tâm chính của bạn là hiển thị thay vì mã hóa, thì có một hệ thống chuyển đổi tích hợp mà bạn có thể sử dụng:
var num = 255;
document.writeln(num.toString(16)); // Outputs: "ff"
document.writeln(num.toString(8)); // Outputs: "377"
document.writeln(num.toString(2)); // Outputs: "11111111"
Tham chiếu: Tham chiếu số JavaScript
Theo như tôi biết thì không thể sử dụng bộ khử nhị phân trong Javascript. Tôi có ba giải pháp cho bạn, tất cả đều có vấn đề của họ. Tôi nghĩ rằng phương án 3 là "dễ nhìn" nhất về khả năng đọc và nó có thể nhanh hơn nhiều so với phần còn lại - ngoại trừ chi phí thời gian chạy ban đầu. Vấn đề là nó chỉ hỗ trợ các giá trị lên tới 255.
Phương án 1: "00001111".b()
String.prototype.b = function() { return parseInt(this,2); }
Phương án 2: b("00001111")
function b(i) { if(typeof i=='string') return parseInt(i,2); throw "Expects string"; }
Phương án 3: b00001111
Phiên bản này cho phép bạn nhập nhị phân 8 chữ số b00000000, 4 chữ số b0000và chữ số biến b0. Đó là b01bất hợp pháp, bạn phải sử dụng b0001hoặc 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;
Có thể điều này sẽ hữu ích:
var bin = 1111;
var dec = parseInt(bin, 2);
// 15
binđược gán một số trông giống như ở dạng nhị phân, nhưng thực sự đang được phân tích cú pháp cơ sở 10. parseIntHàm dự kiến một chuỗi là đối số đầu tiên, vì vậy nó biến nó thành "1111" (đại diện cơ sở 10), sau đó phân tích lại nó như thể đó là căn cứ 2.
Không, nhưng bạn có thể sử dụng parseInt và tùy ý bỏ qua các trích dẫn.
parseInt(110, 2); // this is 6
parseInt("110", 2); // this is also 6
Nhược điểm duy nhất của việc bỏ qua các trích dẫn là, với số lượng rất lớn, bạn sẽ tràn nhanh hơn:
parseInt(10000000000000000000000, 2); // this gives 1
parseInt("10000000000000000000000", 2); // this gives 4194304
Tôi biết điều này không thực sự trả lời câu hỏi Q (đã được trả lời nhiều lần), tuy nhiên tôi đề nghị bạn (hoặc những người khác quan tâm đến chủ đề này) xem xét thực tế rằng tương thích trình duyệt dễ đọc nhất và ngược / tương lai / tương thích cách sẽ chỉ là sử dụng các đại diện hex.
Từ cụm từ của Q, có vẻ như bạn chỉ nói về việc sử dụng các chữ nhị phân trong mã của mình và không xử lý các biểu diễn nhị phân của các giá trị số (mà parstInt là cách để đi).
Tôi nghi ngờ rằng có nhiều lập trình viên cần xử lý các số nhị phân không quen thuộc với ánh xạ từ 0-F đến 0000-1111. về cơ bản tạo nhóm bốn và sử dụng ký hiệu hex.
vì vậy thay vì viết 101000000010, bạn sẽ sử dụng 0xA02 có cùng ý nghĩa và dễ đọc hơn và ít có khả năng gặp lỗi hơn.
Chỉ cần xem xét khả năng đọc, Hãy thử so sánh cái nào lớn hơn:
10001000000010010 hoặc 1001000000010010
và nếu tôi viết chúng như thế này:
0x11012 hoặc 0x9012
// 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; }
}