¿Por qué obtengo el resultado -27 después de hacer -20 ^ 9 en C?

En C, ^ (Signo de quilates) se usa para la operación XOR de Bitwise , por lo que nunca obtendrá -512000000000 (20 ^ 9). En su lugar, comparará cada bit de ambos números y le dará respuesta. Para más información sobre Bitwise XOR, puede ir aquí AND, OR, XOR, Complement y Shift Operations

Y ahora como conseguiste -27.

En C, el primer bit se usa para determinar números positivos o negativos, es decir, 0 es positivo y 1 es negativo

Y los números negativos se almacenan utilizando el cumplido de 2, para obtener más información sobre el complemento de 2 El complemento de dos: Wikipedia. Pero podemos obtener el cumplido de 2 fácilmente: invirtiendo cada bit y agregando 1 a la respuesta final. Por ejemplo, el elogio de 2 de 100110 se calculará así.

  1. Invertimos todos los bits – 011001
  2. Y sumamos 1 a ese dígito – 011010

Así que 2 de 100110 será 011010

Y -20 se almacenará como 1110 1100 en C. Y 9 se almacenará como 0000 1001 . Y cuando use el operador ^ (Bitwise XOR), comparará ambos números como este

[math] 1110 1100 [/ math]

[math] ^ 0000 1001 [/ math]

[math] = 1110 0101 [/ math]

1110 0101 será la respuesta para esa operación. Y podemos hacer el elogio de la inversa 2 para determinar el número.

  1. Nagate 1 desde 1110 0101 – 1110 0100
  2. Voltear cada bit – 0001 1011

Y es binario para el número 27. así que podemos decir que el complemento de 2 de 27 será 1110 0101, que es -27.

Así es como se obtiene -27 .

Y puedes usar este código para encontrar poderes.

#include
#include

int main (void)
{
doble a, b;

a = -20;
b = 9;

printf (“el valor es% lf”, pow (a, b));

devuelve 0;
}

La función pow () es una función que se encuentra en la biblioteca math.h y tiene el tipo de doble argumento y retorno.

^ es un operador poco inteligente, es decir; Operador XOR que tiene salida

0 0 -0

0 1–1

1 0–1

1 1–1

solo usa la función pow decir pow (20,9)

^ es XOR en modo bit (Exclusivo OR)

Ir a través del siguiente enlace y tratar de averiguar tuyof. Es bastante interesante.

Entendiendo los operadores de Bitwise

lo siento por no responder, creo que es mejor si intentas encontrar la respuesta por tu cuenta.

Los números negativos se almacenan en forma de complemento de 2. Por lo tanto, cuando intenta almacenar un valor más allá del tamaño de la memoria asignada, habrá un desbordamiento o un desbordamiento.

Intente usar “long long int” como su tipo de datos. Obtendrá respuesta deseada. Para más detalles, consulte el complemento de 2 El complemento de dos – Wikipedia.

Este ^ no es reconocido por el compilador de C como signo de poder.