development

JavaScript에서 단일 비트를 어떻게 설정하고, 지우고, 토글합니까?

big-blog 2020. 12. 27. 20:40
반응형

JavaScript에서 단일 비트를 어떻게 설정하고, 지우고, 토글합니까?


JavaScript에서 설정, 지우기, 토글 및 확인하는 방법은 무엇입니까?


비트 마스크를 얻으려면 :

var mask = 1 << 5; // gets the 6th bit

비트가 설정되었는지 테스트하려면 :

if ((n & mask) != 0) {
  // bit is set
} else {
  // bit is not set
}

조금 설정하려면 :

n |= mask;

조금을 지우려면 :

n &= ~mask;

조금 토글하려면 :

n ^= mask;

Javascript 비트 연산자를 참조하십시오 .


몇 가지를 추가하고 싶습니다 (@cletus 덕분에)

function bit_test(num, bit){
    return ((num>>bit) % 2 != 0)
}

function bit_set(num, bit){
    return num | 1<<bit;
}

function bit_clear(num, bit){
    return num & ~(1<<bit);
}

function bit_toggle(num, bit){
    return bit_test(num, bit) ? bit_clear(num, bit) : bit_set(num, bit);
}

비트 가져 오기

function getBit(number, bitPosition) {
  return (number & (1 << bitPosition)) === 0 ? 0 : 1;
}

비트 설정

function setBit(number, bitPosition) {
  return number | (1 << bitPosition);
}

클리어 비트

function clearBit(number, bitPosition) {
  const mask = ~(1 << bitPosition);
  return number & mask;
}

업데이트 비트

function updateBit(number, bitPosition, bitValue) {
  const bitValueNormalized = bitValue ? 1 : 0;
  const clearMask = ~(1 << bitPosition);
  return (number & clearMask) | (bitValueNormalized << bitPosition);
}

예제는 JavaScript 알고리즘 및 데이터 구조 저장소 에서 가져 왔습니다 .


@cletus 정보의 도움으로 BitSet 클래스를 만들었습니다.

function BitSet() {
    this.n = 0;
}

BitSet.prototype.set = function(p) {
    this.n |= (1 << p);
}

BitSet.prototype.test = function(p) {
    return (this.n & (1 << p)) !== 0;
}

BitSet.prototype.clear = function(p) {
    this.n &= ~(1 << p);
}

BitSet.prototype.toggle = function(p) {
    this.n ^= (1 << p);
}

참조 URL : https://stackoverflow.com/questions/1436438/how-do-you-set-clear-and-toggle-a-single-bit-in-javascript

반응형