0xJavascript에서 16 진수의 접두사 라는 것을 알고 있습니다. 예를 들어 0xFF숫자 255를 나타냅니다.
이진수와 비슷한 것이 있습니까? 나는 0b1111숫자를 나타낼 것으로 예상 15되지만 이것은 효과가 없습니다.
0b0111_0_1_0_1.
0xJavascript에서 16 진수의 접두사 라는 것을 알고 있습니다. 예를 들어 0xFF숫자 255를 나타냅니다.
이진수와 비슷한 것이 있습니까? 나는 0b1111숫자를 나타낼 것으로 예상 15되지만 이것은 효과가 없습니다.
0b0111_0_1_0_1.
답변:
최신 정보:
최신 버전의 JavaScript, 특히 ECMAScript 6은 이진 (prefix 0b), 8 진 (prefix 0o) 및 16 진 (prefix 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
이 기능은 Firefox 및 Chrome에서 이미 사용할 수 있습니다. 현재는 IE에서 지원되지 않지만 스파르탄이 도착했을 때입니다.
( 세미콜론 의 의견과 이것을 지적한 것에 대한 소망의 답변 에 감사드립니다 .)
원래 답변 :
아니요, 이진수에 해당하는 것이 없습니다. JavaScript는 10 진수 (접두사 없음), 16 진수 (prefix 0x) 및 8 진수 (prefix 0) 형식의 숫자 리터럴 만 지원합니다 .
가능한 대안 중 하나 parseInt는 기수와 함께 이진 문자열을 메소드 에 전달하는 것입니다 .
var foo = parseInt('1111', 2); // foo will be set to 15
0b지원할 언어는 거의 없습니다 .
int typenor integer type가 없으므로 모든 정수는 부동 소수점으로 저장됩니다.
나는 사람들이 프로토 타입을 확장하는 것은 좋은 생각이 아니라 당신의 대본이라고 말합니다.
나는 이것을 이렇게한다 :
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)실제 답변이 될 수 있습니다!
코딩이 아닌 디스플레이가 주요 관심사 인 경우 사용할 수있는 내장 변환 시스템이 있습니다.
var num = 255;
document.writeln(num.toString(16)); // Outputs: "ff"
document.writeln(num.toString(8)); // Outputs: "377"
document.writeln(num.toString(2)); // Outputs: "11111111"
참조 : JavaScript 숫자 참조
내가 아는 한 Javascript에는 이진 표시기를 사용할 수 없습니다. 나는 당신을 위해 세 가지 해결책을 가지고 있으며, 모두 해결책이 있습니다. 대안 3이 가독성에있어 가장 "좋아 보인다"고 생각합니다. 초기 런타임 비용을 제외하고는 나머지 것보다 훨씬 빠릅니다. 문제는 최대 255 개의 값만 지원한다는 것입니다.
대안 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;
이것이 유용 할 수 있습니다.
var bin = 1111;
var dec = parseInt(bin, 2);
// 15
bin이진수로 보이는 숫자가 할당되었지만 실제로는 10 진법으로 구문 분석되고 있습니다.이 parseInt함수는 문자열을 첫 번째 인수로 예상하므로 "1111"(기본 10 표현)으로 바꾼 다음 다시 구문 분석합니다. 그것은 기본 2.했다
아니요. 그러나 parseInt를 사용하고 선택적으로 따옴표를 생략 할 수 있습니다.
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
나는 이것이 실제로 여러 번 대답 된 질문에 대답하지는 않는다는 것을 알고 있습니다. 방법은 16 진수 표현을 사용하는 것입니다.
Q의 문구에서 코드에 이진 리터럴을 사용하는 것에 대해서만 이야기하고 숫자 값의 이진 표현을 처리하지는 않는 것 같습니다 (parstInt가 갈 길입니다).
0-F에서 0000-1111 로의 맵핑에 익숙하지 않은 2 진 숫자를 처리해야하는 많은 프로그래머가 있는지 의심합니다. 기본적으로 4 개의 그룹을 만들고 16 진 표기법을 사용하십시오.
따라서 101000000010을 쓰는 대신 0xA02를 사용합니다. 0xA02는 정확히 같은 의미를 가지며 훨씬 더 읽기 쉽고 오류가 적습니다.
가독성을 고려하고
10001000000010010 또는 1001000000010010 중 더 큰 것을 비교해보십시오
내가 다음과 같이 쓰면 어떻게
될까요 : 0x11012 또는 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; }
}