import { _decorator } from 'cc' const { ccclass, property } = _decorator @ccclass('BitUtil') export default class BitUtil { // index是二进制从右到左 public static isBitSet(value: number, index: number): boolean { const str: string = value.toString(2) return Number.parseInt(str[str.length - 1 - index]) === 1 } // 从右到左计算 public static setBitValue(value: number, index: number): number { let newValue: number = value const str: string = value.toString(2) let newStr: string = '' const maxIndex = Math.max(str.length - 1, index) for (let i = 0; i <= maxIndex; i++) { if (index === i) { newStr = `1${newStr}` } else { if (str[i] === undefined) newStr = `0${newStr}` else newStr = str[i] + newStr } } newValue = Number.parseInt(newStr, 2) return newValue } public static clearBitValue(value: number, index: number) { let newValue: number = value const str: string = value.toString(2) let newStr: string = '' for (let i = str.length - 1; i >= 0; i--) { if (index === str.length - 1 - i) newStr = `0${newStr}` else newStr = str[i] + newStr } newValue = Number.parseInt(newStr, 2) return newValue } }