source

자바스크립트에서 이진수를 나타내는 "0b" 등이 있습니까?

lovecheck 2023. 10. 9. 23:23
반응형

자바스크립트에서 이진수를 나타내는 "0b" 등이 있습니까?

나는 그것을 알고 있습니다.0x는 자바스크립트의 16진수 접두사입니다.를 들면,면,0xFF는 255를 나타냅니다.

이진수와 비슷한 것이 있습니까?합니다를 합니다.0b111115 않아요

업데이트:

( ECMA스크립트 6) 는(prefix) 에했습니다에 되었습니다.0b), ( )0o및 ) 16(: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

이 기능은 파이어폭스와 크롬에서 이미 사용할 수 있습니다.현재 IE에서는 지원되지 않지만 스파르탄이 도착하면 지원될 것으로 보입니다.

(이를 지적해주신 세미콜론님의 코멘트와 urish님의 답변에 감사드립니다.)

원래 답변:

아니요, 이진수에 해당하는 것은 없습니다.접두사 16진수(을 10수음), 1수음)합니다만 합니다.0x 및 ) ( )0 형식.

한 을 입니다.parseInt radix법:

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

ECMAS 즉, ECMAS 6 에서는됩니다입니다.0b1111 === 15사실입니다.대문자 B를 사용할 수도 있습니다(예:0B1111).

.NumericLiteralsES6 사양에 포함되어 있습니다.

코딩이 아닌 디스플레이가 주된 관심사라면 다음과 같은 변환 시스템이 내장되어 있습니다.

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

참조: MDN 켜짐

사람들이 시제품을 연장하는 것이 좋지 않다고 말하는 것을 알지만, 당신의 대본은...

이런 식으로 합니다.

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이 가독성을 위한 가장 "잘 보이는" 것이라고 생각하며, 초기 실행 시간 비용을 제외하고는 나머지 부분보다 훨씬 빠릅니다.문제는 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자리b0000sb0는.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

아니요, 하지만 파싱을 이용하실 수 있습니다.int 및 선택적으로 따옴표를 생략합니다.

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

이것이 (이미 여러 번 대답한) 질문한 Q에 그대로 답하지 않는다는 것을 알고 있지만, 귀하(또는 이 주제에 관심 있는 다른 사람들)가 가장 읽기 쉬운 & 역방향/미래/교차 브라우저 호환 방법은 단순히 hex 표현을 사용하는 것일 것이라는 사실을 고려할 것을 제안합니다.

Q의 표현을 보면 코드에서 이진 리터럴을 사용하고 숫자 값의 이진 표현을 처리하는 것이 아닌 것처럼 보일 것입니다.인트가 가야 할 길입니다).

0-F에서 0000-1111로의 매핑에 익숙하지 않은 이진수를 처리해야 하는 프로그래머들이 많이 있을지 의문입니다. 그래서 기본적으로 4인 1조를 만들어서 16진수 표기법을 사용합니다.

그래서 101000000010을 쓰는 대신에 당신은 정확하게 같은 의미를 가지고 있고 훨씬 더 가독성이 높고 오류가 발생할 가능성이 적은 0xA02를 사용할 것입니다.

가독성을 고려하고, 어떤 것이 더 큰지 비교해 보십시오.
10001000000010010 또는 10010000010010

이렇게 쓰면 어떨까요?
0x11012 또는 0x9012

이진 문자열을 숫자와 비자로 변환합니다.

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

Number() 함수를 사용하면 작동...

// using Number() 
var bin = Number('0b1111');    // bin will be set to 15
var oct = Number('0o17');      // oct will be set to 15
var oxx = Number('0xF');       // hex will be set to 15

// making function convTo
const convTo = (prefix,n) => {
  return Number(`${prefix}${n}`) //Here put prefix 0b, 0x and num
}

console.log(bin)
console.log(oct)
console.log(oxx)

// Using convTo function
console.log(convTo('0b',1111))

언급URL : https://stackoverflow.com/questions/2803145/is-there-0b-or-something-similar-to-represent-a-binary-number-in-javascript

반응형