C ++: bitset 56 --- el tipo especial de la biblioteca estándar de instalación

A, bitset general

  • BitSet define biblioteca de clases que operaciones de bits más fácil de usar , y capaz de manejar más de un tamaño máximo de bits del conjunto de tipo entero
  • bitset se define en el archivo de cabecera en el bitset

En segundo lugar, la definición e inicialización bitset

  • La figura muestra el método de construcción de la bitset
  • Baja y alta:
    • conjunto binario posición de inicio (índice 0) se denomina baja, se hace referencia como la posterior alta
    • Nota, el índice bitset 0 a partir de la extrema derecha
  • clase bitset es una plantilla, similar al tipo de matriz, tiene un tamaño fijo , y el tamaño debe ser una expresión constante. Cuando se define una bitset, tenemos que declarar la cantidad de bits que contiene:
std::bitset<32> bitvec(1U);  //U占32位。因此bitvec为32位;低位为1,其他位均为0

Los valores sin signo con bitset inicialización

  • Cuando usamos un valor de la integral de tiempo para inicializar la bitset , este valor se convierte a unsigned long long tipo y se trata como un patrón de bits
  • Las reglas son las siguientes:
    • Si el tamaño de la bitset es mayor que el número de bits en un unsigned long largo, el bit de orden restante se establece en 0
    • Si el tamaño de la bitset más pequeño que el número de bits en un unsigned long largo, usando solamente un valores de estado dado, excede el tamaño de la bitset superior descartado
  • Por ejemplo:
//0xbeef为:1011 1110 1110 1111

//bitvec1比初始值小。高位被丢弃
std::bitset<13> bitvec1(0xbeef);  //二进制位序列为1 1110 1110 1111

//bitvec1比初始值大。高位被置位0
std::bitset<20> bitvec2(0xbeef);  //进制位序列为0000 1011 1110 1110 1111

//在64位机器上,long long 0ULL是64位的,因此~0ULL是64个1
std::bitset<128> bitvec3(~0ULL);  //0~63位为1,63~127位为0

std::cout << "bitvec1: " << bitvec1 << std::endl;
std::cout << "bitvec2: " << bitvec2 << std::endl;
std::cout << "bitvec3: " << bitvec3 << std::endl;

 

BitSet de una cadena de inicialización

  • Podemos partir de una cadena o un puntero array de caracteres para inicializar el bitset
  • Nota (Key): Cuando se utiliza el número representado por una cadena, la cadena de caracteres estándar correspondiente a alta mínimo, carácter subíndice correspondiente al máximo de baja
  • Por ejemplo:
std::bitset<32> bitvec4("1100"); //1100
std::cout << "bitvec4 : " << bitvec4 << std::endl;

 

  • También podemos usar la cadena sub-cadena para inicializar el bitset. Por ejemplo:
std::string str("1111111000000011001101");
std::bitset<32> bitvec5(str, 5, 4);           //1100
std::bitset<32> bitvec6(str, str.size() - 4); //1101

std::cout << "bitvec5 : " << bitvec5 << std::endl;
std::cout << "bitvec6 : " << bitvec6 << std::endl;

 

Tres operaciones, BitSet

  • Operación más o menos dividido en dos categorías:
    • Una especie de bitset información de la declaración. Por ejemplo recuento, tamaño, todos, ninguno, ninguno, etc.
    • Otra clase para establecer el bitset. Por ejemplo, activar, desactivar, flip. Estas funciones están sobrecargados
  • Por ejemplo:
std::bitset<32> bitVec(1U);      //32位,低位为1,剩余位为0

bool is_set = bitVec.any();      //true,因为有1被置位
bool is_not_set = bitVec.none(); //false,因为有1被置位
bool all_set = bitVec.all();     //false,因为有1被置位

size_t onBits = bitVec.count();  //返回1
size_t sz = bitVec.size();       //返回31

bitVec.flip();                   //反转bitvec中的所有位
bitVec.reset();                  //将所有位复位
bitVec.set();                    //将所有位复位
  • Los miembros de la tapa, set, reset y prueba nos permite leer y escribir los bits especifican la ubicación , por ejemplo:
std::bitset<32> bitVec(1U);     //32位,低位为1,剩余位为0

int i = 5;
bitVec.flip(0);                 //翻转第1位          
bitVec.set(bitVec.size() - 1);  //置位第1位
bitVec.set(0, 0);               //复位第1位
bitVec.reset(i);                //复位第i位
bitVec.test(0);                 //返回false,因为第1位是复位的
  • operador subíndice const para volver a cargar los atributos:
    • versión const del valor del operador subíndice vuelve a la posición donde BOOL, devuelve verdadero si el bit es un 1, este bit vuelve a 0 falase
    • versión no const devuelve un tipo especial bitset definido, nos permite manipular el valor del bit especificado
std::bitset<32> bitVec(1U);   //32位,低位为1,剩余位为0

bitVec[0] = 0;                //将第1位复位 
bitVec[31] = bitVec[0];       //将最后一位设置为与第1位一样
bitVec[0].flip();             //翻转第1位
~bitVec[0];                   //等价操作,也是翻转第1位
bool b = bitVec[0];           //将bitVec[0]的值转换为bool类型

Bitset valores extraídos (to_ulong, to_ullong)

  • operación y to_ulong to_ullong devolver un valor , objetos almacenados con el bitset patrón mismo bit
  • Sólo cuando el tamaño de la bitset <= tamaño correspondiente (to_ulong como unsigned long, to_ullong como unsigned largo de largo), con el fin de utilizar estas dos operaciones
  • Por ejemplo:
//在64位机器上,long long 0ULL是64位的,因此~0ULL是64个1
std::bitset<128> bitvec3(~0ULL);  //0~63位为1,63~127位为0
	
unsigned long ulong = bitvec3.to_ulong();
std::cout << "ulong = " << ulong << std::endl;
  • Resultados de operación por encima de los procedimientos son los siguientes:

 

El operador IO bitset

  • La entrada del operador (>>):
    • Una corriente leído de la cadena de caracteres de entrada se guarda en un objeto temporal
    • Hasta que el número de caracteres leídos alcances bitset correspondiente tamaño, o el personaje no se encuentra cuando 1 o 0, o cuando el extremo del error de archivo o entrada, el proceso de lectura se detiene
    • Después de que el proceso de lectura de inmediato el uso de un objeto de cadena temporal para inicializar el bitset
    • Si el número de caracteres leídos es más pequeño que el tamaño de la bitset, como de costumbre, alta bit se pone 0
  • operador de salida (<<):
    • Imprimir un patrón de bits objeto bitset
  • Por ejemplo:
std::bitset<16> bits;
std::cin >> bits;
std::cout << "bits: " << bits << std::endl;

presentación de un caso

  • Ahora tenemos un programa: Supongamos que hay 30 estudiantes en la clase, el profesor de la conducta del estudiante una inspección semanal, resultados de las pruebas y no divididos por dos. Se utilizó para representar un unsigned long, long sin signo en cualquier máquina de al menos 32, por lo que puede utilizar cada vez de un estudiante
  • Aquí empezamos con la operación más común poco para completar esta función
bool status;
unsigned long quizA = 0;    //此值被当作位集合使用
quizA |= 1UL << 27;         //指出第27个学生通过了检测
status = quizA&(1UL << 27); //检查第27个学生示范通过了检测
quizA &= ~(1UL << 27);      //第27个学生为通过检测
  • Se utilizó para hacer el mismo trabajo por encima bitset 
bool status;
	
std::bitset<30> quizB; //每个学生分配一位,所有位初始化为0
quizB.set(27);         ///指出第27个学生通过了检测
status = quizB[27];    //检查第27个学生示范通过了检测
quizB.reset(04);       //第27个学生为通过检测

 

Liberadas 1504 artículos originales · ganado elogios 1063 · Vistas de 430.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_41453285/article/details/104668968
Recomendado
Clasificación