MENÚ GO UNITE SLEEP ESCARLATA / PÚRPURA LEYENDAS POKÉDEX MOVEDEX
Λ H V

 

Pokéxperto
346

Sistemas y Operaciones Numéricos

Guías Abuso RNG

Contenido

  1. Introducción
  2. Sistemas Numéricos
    1. Equivalencia Entre Sistemas Numéricos
  3. Operaciones Numéricas
    1. Operaciones Aritméticas
    2. Operaciones en Bits

1.- Introducción:

Esta guía está enfocada para aquellas personas que no estén familiarizadas con el tema y deseen saber un poco más acerca de la nueva mecánica relacionada con Pokémon (como el RNG por ejemplo). Se verán de forma introductoria los sistemas y operaciones binarias con una orientación a su uso en mecánica Pokémon. Para una explicación bien detallada y completa siempre puedes buscar por Internet.

La finalidad es que el lector sea capaz de aplicar las fórmulas que se ven en las secciones de mecánica por sí mismo o ayudado de una calculadora, y pueda hacer sus propias deducciones.

Para el resto de la guía, trataremos las operaciones o conversiones con la calculadora de Windows en modo científico (Menú Ver > Opción Científica), que debe ser lo más común para la mayoría:

Calculadora

2.- Sistemas Numéricos:

Un sistema de numeración es un conjunto de símbolos y reglas que permiten representar datos numéricos. Los sistemas de numeración actuales son sistemas posicionales, que se caracterizan porque un símbolo tiene distinto valor según la posición que ocupa en la cifra.

La razón de por qué debemos entender qué es un sistema numérico, es porque en los sistemas computacionales solo importa uno: El sistema binario, el sistema hexadecimal es utilizado para representar estos números de forma más conveniente para nosotros.

Sistema Binario
Éste sistema emplea tan solo 2 dígitos: 0 y 1. Es decir, un sistema numérico en base 2.
Sistema Hexadecimal
Éste sistema emplea 16 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. Es decir, es un sistema numérico en base 16.

La representación de un número entero en un sistema de base N sería:

Número = (1er Díg. * N0) + (2do Díg. * N1) + (3er Díg. * N2) + ... + (nmo Díg. * Nn)

Donde...

  • N es la base del número.
  • Los superíndices de N representan la potencia de éste.
  • 1er Díg., 2do Díg., etc representan los dígitos del número que está en base N.
  • n es el número de dígitos del número.

Así, el número "wxyz" que está en base N: El primer dígito será "z", el segundo dígito será "y", el tercer dígito será "x" y el cuarto dígito será "w". En sistemas numéricos posicionales, el dígito de menos significancia es el que está más a nuestra derecha, y es el que tiene menos peso en el número mismo, el dígito de más

Un número de base diferente a 10, que es la que cotidianamente manejamos, cobra significado para nosotros si lo convertimos a un número en base 10, la anterior ecuación sirve para tales fines si conocemos la equivalencia entre dígitos para cada sistema.

Tal equivalencia entre dígitos sería, para los 3 sistemas que necesitaremos manejar:

Decimal Binario Hexadecimal
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

Para denotar que un número en particular está en cierta base, basta con poner el valor de la base como un subíndice al final de éste. Así, un número en decimal como 3185 estaría mostrando en qué base está si se escribe de la forma 318510; número que es diferente al que se escribe 318516, que sería un número hexadecimal.

En la práctica esto no se suele utilizar así, y en cambio se utiliza otra notación para cada sistema en particular:

  • Para números hexadecimales: El número se precede de "0x" o se termina con "h", así el número 18F16, quedaría 0x18F ó 18Fh.
  • Para números binarios: No suele ser necesario utilizar una notación especial, debido a que solo hay dos dígitos que utilizar, pero por lo general el número es agrupado en grupos de 4 dígitos, así el número 1100011112, quedaría 0001 1000 1111.

Ejemplo:

El número en binario: 101100010, ¿que valor tendrá como número en base 10?.
Primero identificamos cada dígito y su posición, luego procedemos con las operaciones que indica la fórmula:

  1. 1er Díg.: 0 >
    0 = 0 * 1 = 0 * 20
  2. 2do Díg.: 1 >
    2 = 1 * 2 = 1 * 21
  3. 3er Díg.: 0 >
    0 = 0 * 4 = 0 * 22
  4. 4to Díg.: 0 >
    0 = 0 * 8 = 0 * 23
  5. 5to Díg.: 0 >
    0 = 0 * 16 = 0 * 24
  6. 6to Díg.: 1 >
    32 = 1 * 32 = 1 * 25
  7. 7mo Díg.: 1 >
    64 = 1 * 64 = 1 * 26
  8. 8vo Díg.: 0 >
    0 = 0 * 128 = 0 * 27
  9. 9no Díg.: 1 >
    256 = 1 * 256 = 1 * 28

Y en total tenemos:
354 = 0 + 2 + 0 + 0 + 0 + 32 + 64 + 0 + 256.

Para hacerlo en la calculadora, solo basta con cambiar al modo de sistema binario (la opción "Bin"), poner el número dado, y pasar al modo de sistema decimal (la opción "Dec").

Ejemplo:

El número en hexadecimal: B40E, ¿que valor tendrá como número en base 10?.
Primero identificamos cada dígito y su posición, luego procedemos con las operaciones que indica la fórmula:

  1. 1er Díg.: E >
    14 = 14 * 1 = E * 160
  2. 2do Díg.: 0 >
    0 = 0 * 16 = 0 * 161
  3. 3er Díg.: 4 >
    1024 = 4 * 256 = 4 * 162
  4. 4to Díg.: B >
    45056 = 11 * 4096 = B * 163

Y en total tenemos:
46094 = 14 + 0 + 1024 + 45056.

Para hacerlo en la calculadora: Cambiamos al modo de sistema hexadeciaml (la opción "Hex"), poner el número dado, y pasar al modo de sistema decimal (la opción "Dec").

2.1- Equivalencia Entre Sistemas Numéricos.

Ya se ha explicado cómo pasar un número de un sistema en base N al sistema decimal. Aunque lo contrario no será explicado aquí, es muy fácil de hacer esto en la calculadora mostrada.

Se puede hacer conversión entre 4 sistemas: Hexadecimal (Hex), Decimal (Dec), Octal (Oct) y Binario (Bin) (el sistema octal tiene como base el número 8, y toma los dígitos desde el 0 hasta el 7), de cualquiera a cualquiera. Para hacer la conversión correctamente, antes de poner el número primero se debe elegir el sistema con el que se está tratando, después, para ver su equivalente a otro sistema, solo hay que cambiar la opción de la calculadora.

Sin embargo, transformar un número binario a un hexadecimal o viceversa es realmente sencillo, debido a que 16 (la base de los números en hexadecimal) es una potencia de 2 (la base de los números en binario), y en realidad ésta es la razón de utilizar el sistema hexadecimal junto con el sistema binario.

Ejemplo:

¿Cómo sería en hexadecimal el número 11100001100111, que está en binario?
Lo primero es pasar el número en grupos de 4, y de hecho esa es la idea de hacerlo, ya que 16=24:

  • 0011 1000 0110 0111.

Luego cogemos cada grupo del número y encontramos su equivalente dígito en hexadecimal, según la tabla que ya se vio, y en resumen tendríamos:

0011 1000 0110 0111
3 8 6 7

Y se concluye que el número en hexadecimal es 3867 ó 0x3867

Ejemplo:

¿Como sería en binario el número 392A que está en hexadecimal?
Para el caso lo que hacemos es coger cada dígito y encontrar su correspondiente en binario según la tabla que ya se vio, y en resumen tendríamos:

3 9 2 A
0011 1001 0010 1010

Y se concluye que el número en binario es 0011 1001 0010 1010 ó 11100100101010

3.- Operaciones Numéricas:

Ahora que vimos un poco cómo tratar números en otros sistemas, binario y hexadecimal, ya podemos ver la parte que interesa: Cómo hacer las operaciones entre números y obtener un resultado correcto.

Al hacer las operaciones y obtener un resultado podemos llegar al punto de conclusión: Dado el PID, ID, SID de mi Pokémon, ¿será Shiny?, o dado un valor del RNG para un estado X, ¿cuál será su valor en un estado X+1 o cuál fue su valor en X-4?, etc.

Hay dos grandes grupos de operaciones numéricas: Las operaciones aritméticas y las operaciones en bits (bitwise y bit shift), para ambos grupos veremos las operaciones que nos interesan:

3.1.- Operaciones Aritméticas

Son las operaciones que comúnmente utilizamos y conocemos, entre las que se incluyen la suma, la resta, la multiplicación, la división y el residuo. Todas estas operaciones utilizadas en este contexto (a menos que se especifique lo contrario) tratan y arrojan siempre resultados enteros, es decir, no tenemos en cuenta en ningún momento los valores decimales, sino que se descartan. Esto es así porque a los ordenadores les resulta menos costoso y más rápido realizar operaciones si tratan los números con esta simplificación. Por supuesto los ordenadores pueden operar con decimales, a través de los números con coma flotante, de los que en esta guía no hablamos.

La suma, la multiplicación y la resta son utilizados de igual forma que en la aritmética convencional, pero la división tiene una pequeña variante. Como se dijo, no tenemos en cuenta resultados decimales, y así la división de 8 ÷ 3 ó 7 ÷ 3 nos dan el mismo resultado de 2, aun cuando con números decimales fueran 2,667 y 2,333 respectivamente.

La última operación, el residuo, es la operación que complementa la falta de uso de los decimales en la división. Esta operación tiene como resultado el residuo de la división de dos números, así la división 8 ÷ 3 ó 7 ÷ 3 tendrá como resultado de residuo 2 y 1 respectivamente. La operación de residuo se puede ver también como el número que habría que restarle al dividendo para que la división fuera entera (es decir, residuo de 0). Esta operación también se conoce como módulo.

La siguiente tabla resume las operaciones y sus símbolos:

Nombre Notación Símbolo
(en C++/Java)
Calculadora
Suma + + +
Resta - - -
Multiplicación × * *
División ÷ / /
Residuo mod % Mod

Realizar operaciones en números binarios o hexadecimales se puede aprender, pero es algo que no se explicará en la guía. Sin embargo siempre se puede pasar los números es estos sistemas a números en base 10 como ya se ha visto, y luego hacer las operaciones.

De todos modos en la calculadora sí se pueden hacer las operaciones en los sistemas que ya se vieron, y además pasar los resultados a otros sistemas. El botón que indica la operación se puede ver en la tabla.

3.2.- Operaciones en Bits (Bitwise y Bit shift)

Bit es el acrónimo de binary digit (dígito binario). Un bit es un dígito del sistema de numeración binario. En él se usan sólo dos dígitos, el 0 y el 1. Un bit o dígito binario puede representar uno de esos dos valores, 0 ó 1.

El bit es la unidad mínima de información empleada en informática, en cualquier dispositivo digital, o en la teoría de la información. Con él, podemos representar dos valores cualquiera, como verdadero o falso, abierto o cerrado, blanco o negro, norte o sur, masculino o femenino, etc.

Para entender cómo hacer las operaciones en bits debemos ver y manipular los números que estén implicados en ella como números binarios. Estas operaciones en cambio no son comúnmente utilizadas por nosotros, pero en lo sistemas computacionales son undamentales. Como se verá, se llaman operaciones en bits porque precisamente obtendremos un resultado de hacer cálculos a partir de los bits que componen los números.

Para operar dos números que tengan diferente cantidad de bits, lo mejor es "igualar" la cantidad de bits de ambos, agregando tantos ceros como sean necesarios a la parte izquierda del más pequeño. De esta forma, los números 1001 y 1101101, quedarían con igual cantidad de bits si agregamos 3 ceros a la parte izquierda del primer número, tendríamos: 0001001 y 1101101. Esto es así porque las operaciones en bits entre dos números se hacen bit por bit, según la posición que tengan éstos en el número. El resultado de la operación si tenemos esto presente siempre va a dar un número igual a la cantidad de bits de los números que se operaron, y en general se tendría:

  • El primer bit del número resultante es el cálculo que da de hacer la operación indicada del primer bit del primer número con el primer bit del segundo número.
  • El segundo bit del número resultante es el cálculo que da de hacer la operación indicada del segundo bit del primer número con el segundo bit del segundo número.
  • El tercer bit del número resultante es el cálculo que da de hacer la operación indicada del tercer bit del primer número con el tercer bit del segundo número.
  • Y así hasta el último bit.

Lo dicho tendrá más lógica si vemos las tablas de verdad para cada una de las operaciones.

Primero listaremos las operaciones y luego veremos cómo hacer con cada una:

  • Operaciones Bit a Bit (Bitwise)
Nombre Notación Símbolo
(en C++/Java)
Calculadora
"Y" and & And
"O" or | Or
"O" excluyente xor ^ Xor

Y las tablas de verdad para cada operación serían:

  • "Y" ó AND: Resulta 1 si ambos bits son 1, y 0 en otro caso.
    Bit A Bit B Bit Resultante.
    0 0 0
    0 1 0
    1 0 0
    1 1 1
  • "O" ó OR: Resulta 1 si al menos uno de los bits es 1, y 0 en otro caso.
    Bit A Bit B Bit Resultante.
    0 0 0
    0 1 1
    1 0 1
    1 1 1
  • "O" exclusiva ó XOR: Resulta 1 si sólamente uno de los bits es 1 (pero no los dos), y 0 en otro caso.
    Bit A Bit B Bit Resultante.
    0 0 0
    0 1 1
    1 0 1
    1 1 0
  • Operaciones Cambio de Bit (Bit shift)
  • Estas operaciones mueven los bits a la derecha (eliminando los que sobren), o a la izquierda (añadiendo ceros).
Nombre Notación Símbolo
(en C++/Java)
Calculadora
Desplazamiento
a la derecha
>> >> Inv+Lsh
Desplazamiento
a la izquierda
<< << Lsh

Revisado el 31 de mayo de 2010 a las 18:32

 

Riolu