ejemplos descargar definicion compiler caracteristicas c++

descargar - c++ manual



¿Qué es(x & 1) y(x>>=1)? (4)

Además de la respuesta de "dasblinkenlight", creo que un ejemplo podría ayudar. Solo usaré 8 bits para una mejor comprensión.

x & 1 produce un valor que es 1 o 0 , dependiendo del bit menos significativo de x : si el último bit es 1 , el resultado de x & 1 es 1 ; De lo contrario, es 0 . Esta es una operación Y a nivel de bits.

Esto se debe a que 1 se representará en bits como 00000001 . Sólo el último bit se establece en 1 . Supongamos que x es 185 que se representará en bits como 10111001 . Si aplica una operación AND a nivel de bit en x con 1 este será el resultado:

00000001 10111001 -------- 00000001

Los primeros siete bits del resultado de la operación serán 0 después de la operación y no transmitirán información en este caso (consulte la operación lógica Y ). Como cualquiera de los primeros siete bits del operando x eran anteriores, después de la operación serán 0 . Pero el último bit del operando 1 es 1 y revelará si el último bit del operando x fue 0 o 1 . Entonces, en este ejemplo, el resultado de la operación AND a nivel de bits será 1 porque nuestro último bit de x es 1 . Si el último bit hubiera sido 0 , entonces el resultado también habría sido 0 , lo que indica que el último bit del operando x es 0 :

00000001 10111000 -------- 00000000

x >>= 1 significa "establecer x a sí mismo desplazado en un bit a la derecha". La expresión se evalúa al nuevo valor de x después del cambio

Vamos a elegir el ejemplo de arriba. Para x >>= 1 esto sería:

10111001 -------- 01011100

Y para el turno izquierdo x <<= 1 sería:

10111001 -------- 01110010

Preste atención a la nota del usuario "dasblinkenlight" con respecto a los turnos.

Estoy intentando realizar una asignación: "Encontrar el número de bits en un tipo de datos enteros sin signo sin usar la función sizeof ()".

Y mi diseño es convertir el entero en bits y luego contarlos. Por ejemplo: 10 is 1010 y 5 is 101

La conversión de enteros en una representación de bits muestra algo como esto:

do { Vec.push_back( x & 1 ) } while ( x >>= 1 );

No quiero simplemente copiar cosas pegadas. Cuando uso F-10 veo lo que (x & 1) está haciendo pero no sé cómo se llama o cómo funciona (¿comparas algo?). También sé >= que "mayor que o igual" pero ¿qué es x >>= 1 ?

Nota: El duplicado marcado es un JavaScript y no C ++


Es similar a x = (x >> 1) .

(operand1)(operator)=(operand2) implies(=>) (operand1)=(operand1)(operator)(operand2)

Desplaza el valor binario de x en uno hacia la derecha.

P.ej

int x=3; // binary form (011) x = x >> 1; // zero shifted in from the left, 1 shifted out to the right: // x=1, binary form (001)


Estos son los operadores de Bitwise ( reference ).

x & 1 produce un valor que es 1 o 0 , dependiendo del bit menos significativo de x : si el último bit es 1 , el resultado de x & 1 es 1 ; De lo contrario, es 0 . Esta es una operación Y a nivel de bits.

x >>= 1 significa "establecer x a sí mismo desplazado en un bit a la derecha". La expresión se evalúa al nuevo valor de x después del cambio.

Nota: El valor del bit más significativo después del cambio es cero para los valores de tipo sin signo. Para los valores de tipo con signo, el bit más significativo se copia del bit de signo del valor antes del desplazamiento como parte de la extensión de signo , por lo que el ciclo nunca terminará si x es un tipo con signo y el valor inicial es negativo.


x & 1 es equivalente a x % 2 .

x >> 1 es equivalente a x / 2

Entonces, estas cosas son básicamente el resultado y el resto de la división por dos.