Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
atica. N
umeros y su Representaci
on
M
odulo I. Sesi
on 2.
Dificultad Baja
1 N
umeros y Bases
2 Bits y Operaciones L
ogicas
La Base 10
Nuestro sistema habitual para representar los n
umeros es la
base 10.
La Base 10
Nuestro sistema habitual para representar los n
umeros es la
base 10.
Eso significa que disponemos de 10 smbolos,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, y dependiendo de la posicion de cada
cifra, debemos multiplicar por la potencia de 10 que
corresponda.
La Base 10
Nuestro sistema habitual para representar los n
umeros es la
base 10.
Eso significa que disponemos de 10 smbolos,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, y dependiendo de la posicion de cada
cifra, debemos multiplicar por la potencia de 10 que
corresponda.
As, el n
umero 167 = 1 102 + 6 101 + 7 100
La Base 10
Nuestro sistema habitual para representar los n
umeros es la
base 10.
Eso significa que disponemos de 10 smbolos,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, y dependiendo de la posicion de cada
cifra, debemos multiplicar por la potencia de 10 que
corresponda.
As, el n
umero 167 = 1 102 + 6 101 + 7 100
En este ejemplo diremos que 1 es la cifra mas significativa y 7
la menos significativa.
La Base 10
Nuestro sistema habitual para representar los n
umeros es la
base 10.
Eso significa que disponemos de 10 smbolos,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, y dependiendo de la posicion de cada
cifra, debemos multiplicar por la potencia de 10 que
corresponda.
As, el n
umero 167 = 1 102 + 6 101 + 7 100
En este ejemplo diremos que 1 es la cifra mas significativa y 7
la menos significativa.
Todo esto es es una convenci
on, en realidad no existe ning
un
problema en hacerlo en otro orden o con otra base, y en
informatica de hecho se cambia habitualmente.
La Operacion Inversa
Para reconstruir un n
umeroa partir de sus cifras podemos
utilizar el siguiente c
odigo:
n = ZZ ( [1 ,2 ,3 ,4 , 5 ] , 10 )
print n
La Operacion Inversa
Para reconstruir un n
umeroa partir de sus cifras podemos
utilizar el siguiente c
odigo:
n = ZZ ( [1 ,2 ,3 ,4 , 5 ] , 10 )
print n
El n
umero obtenido es 54321.
La Operacion Inversa
Para reconstruir un n
umeroa partir de sus cifras podemos
utilizar el siguiente c
odigo:
n = ZZ ( [1 ,2 ,3 ,4 , 5 ] , 10 )
print n
El n
umero obtenido es 54321.
Podemos usar variables para representar las listas.
n = 1925
cifras = n . digits ( 10 )
m = ZZ ( cifras , 10 )
m == n
La Operacion Inversa
Para reconstruir un n
umeroa partir de sus cifras podemos
utilizar el siguiente c
odigo:
n = ZZ ( [1 ,2 ,3 ,4 , 5 ] , 10 )
print n
El n
umero obtenido es 54321.
Podemos usar variables para representar las listas.
n = 1925
cifras = n . digits ( 10 )
m = ZZ ( cifras , 10 )
m == n
La Representacion Binaria
Aunque la representaci
on en base 10 es la mas habitual entre
los humanos, no sucede lo mismo en el mundo de la
informatica, donde la representaci
on mas habitual es la que se
hace en base 2 o binaria.
La Representacion Binaria
Aunque la representaci
on en base 10 es la mas habitual entre
los humanos, no sucede lo mismo en el mundo de la
informatica, donde la representaci
on mas habitual es la que se
hace en base 2 o binaria.
En la representaci
on binaria tenemos dos smbolos 0 y 1 y
utilizamos multiplicamos por las potencias de 2 dependiendo
de las posiciones de las cifras.
La Representacion Binaria
Aunque la representaci
on en base 10 es la mas habitual entre
los humanos, no sucede lo mismo en el mundo de la
informatica, donde la representaci
on mas habitual es la que se
hace en base 2 o binaria.
En la representaci
on binaria tenemos dos smbolos 0 y 1 y
utilizamos multiplicamos por las potencias de 2 dependiendo
de las posiciones de las cifras.
As el n
umero binario 1101 corresponde a
3
1 2 + 1 22 + 0 21 + 1 20 = 8 + 4 + 1 = 13.
La Representacion Binaria
Aunque la representaci
on en base 10 es la mas habitual entre
los humanos, no sucede lo mismo en el mundo de la
informatica, donde la representaci
on mas habitual es la que se
hace en base 2 o binaria.
En la representaci
on binaria tenemos dos smbolos 0 y 1 y
utilizamos multiplicamos por las potencias de 2 dependiendo
de las posiciones de las cifras.
As el n
umero binario 1101 corresponde a
3
1 2 + 1 22 + 0 21 + 1 20 = 8 + 4 + 1 = 13.
Si le pedimos a sage las cifras en base 2 del n
umero 13
obtenemos con el comando print 13.digits(2) obtenemos
[ 1, 0, 1, 1], es decir, las cifras binarias empezando por la
menos significativa hasta las mas significativa.
El n
uP
mero asociado a esta lista de cifras binarias sera:
n = 7i=0 L[i]2i = 20 + 22 + 23 + 27 = 141
El n
uP
mero asociado a esta lista de cifras binarias sera:
n = 7i=0 L[i]2i = 20 + 22 + 23 + 27 = 141
Recordemos que el ndice de la lista es el que nos indica la
potencia de 2 por la que tenemos que multiplicar.
El n
uP
mero asociado a esta lista de cifras binarias sera:
n = 7i=0 L[i]2i = 20 + 22 + 23 + 27 = 141
Recordemos que el ndice de la lista es el que nos indica la
potencia de 2 por la que tenemos que multiplicar.
No debemos confundir esto con la representacion binaria del
n
umero que se hace con la notaci
on habitual de mayor peso a
la izquierda, lo podemos ver poniendo bin(n).
Introduccion
Introduccion
Introduccion
Introduccion
0
1
2
3
4
5
6
7
8
9
1 - 15
3 - 12
5 -9
7 -6
9 -3
11 0
13 3
15 6
17 9
19 12
Operando en Bits
&
Operando en Bits
False
&
Operando en Bits
False
True
&
Operando en Bits
False
True
&
0
Operando en Bits
False
True
&
0
1
Operando en Bits
False
False
True
&
0
1
0
0
Operando en Bits
False
False
True
False
&
0
1
0
0
1
0
Operando en Bits
False
False
False
True
False
&
0
1
0
0
0
1
0
Operando en Bits
False
False
False
True
False
True
&
0
1
0
0
0
1
0
1
La Operacion or (o logico)
Dadas dos condiciones l
ogicas, a y b, la condici
on l
ogica
a or b sera cierta cuando sea ciertas alguna de las conciones
a o b o las dos al mismo tiempo. S
olo sera falso si ambas son
falsas.
La Operacion or (o logico)
Dadas dos condiciones l
ogicas, a y b, la condici
on l
ogica
a or b sera cierta cuando sea ciertas alguna de las conciones
a o b o las dos al mismo tiempo. S
olo sera falso si ambas son
falsas.
Por ejemplo:
for j in range ( 7 ) :
if 2 * j + 1 < 6 or 3 * j - 15 > 0 :
print j , 2 * j +1 , 3 * j - 15
1 - 15
3 - 12
5 -9
13 3
0
1
2
3
4
5
6
1 - 15
3 - 12
5 -9
7 -6
9 -3
11 0
13 3
Operando en Bits
Operando en Bits
False
Operando en Bits
False
True
Operando en Bits
False
True
|
0
Operando en Bits
False
True
|
0
1
Operando en Bits
False
False
True
|
0
1
0
0
Operando en Bits
False
False
True
True
|
0
1
0
0
1
1
Operando en Bits
False
False
True
True
True
|
0
1
0
0
1
1
1
Operando en Bits
False
False
True
True
True
True
|
0
1
0
0
1
1
1
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
1
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
1
1
0
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
1
1
0
1
1
0
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
1
1
0
1
1
0
0
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
c = a &b
1
1
0
1
1
0
0
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
c = a &b
1
1
1
0
1
1
0
0
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
c = a &b
1
1
1
0
1
0
1
0
0
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
c = a &b
1
1
1
0
1
0
1
0
0
0
1
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
c = a &b
1
1
1
0
1
0
1
0
0
0
1
0
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
c = a &b
1
1
1
0
1
0
1
0
0
0
1
0
La operacion &
Sea a el n
umero decimal 10, que escrito en binario es 1010 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a & b se calculara del siguiente modo:
a
b
c = a &b
1
1
1
0
1
0
1
0
0
0
1
0
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
1
1
0
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
1
1
0
1
1
0
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
1
1
0
1
1
0
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
c = a |b
1
1
0
1
1
0
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
c = a |b
1
1
1
0
1
1
0
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
c = a |b
1
1
1
0
1
1
1
0
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
c = a |b
1
1
1
0
1
1
1
0
1
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
c = a |b
1
1
1
0
1
1
1
0
1
1
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
c = a |b
1
1
1
0
1
1
1
0
1
1
1
1
La operacion |
Sea a el n
umero decimal 11, que escrito en binario es 1011 y
b el n
umero decimal 13 que escrito en binario es 1101,
entonces c = a | b se calculara del siguiente modo:
a
b
c = a |b
1
1
1
0
1
1
1
0
1
1
1
1
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La operacion ^^ (o exclusivo)
La Notacion Hexadecimal
Aparte de la base 10 y la base 2, una base muy importante en
criptografa es la base 16.
La Notacion Hexadecimal
Aparte de la base 10 y la base 2, una base muy importante en
criptografa es la base 16.
Para poder escribir los n
umeros en base 16 necesitamos 16
smbolos diferentes que representen las cifras.
La Notacion Hexadecimal
Aparte de la base 10 y la base 2, una base muy importante en
criptografa es la base 16.
Para poder escribir los n
umeros en base 16 necesitamos 16
smbolos diferentes que representen las cifras.
Lo que se suele hacer es representar las cifras del 0 al 9 con
los n
umeros habituales y a partir del 9 utilizar los siguientes
smbolos: a = 10, b = 11, c = 12, d = 13, e = 14 y f = 15
La Notacion Hexadecimal
Aparte de la base 10 y la base 2, una base muy importante en
criptografa es la base 16.
Para poder escribir los n
umeros en base 16 necesitamos 16
smbolos diferentes que representen las cifras.
Lo que se suele hacer es representar las cifras del 0 al 9 con
los n
umeros habituales y a partir del 9 utilizar los siguientes
smbolos: a = 10, b = 11, c = 12, d = 13, e = 14 y f = 15
As el n
umero hexadecimal
a3b0 = a 163 + 3 162 + b 161 + 0 160 =
10 163 + 3 162 + 11 161 + 0 160 = 41904
9 16 + 12 = 9 16 + c = 9c
12=c
12=c
En el caso de que el n
umero de cifras binarias no sea m
ultiplo de 4
debemos completar con ceros a la izquierda.
110100110 = 0001
| {z } 0110
| {z } = 1a6
| {z } 1010
1
10=a
12=c
En el caso de que el n
umero de cifras binarias no sea m
ultiplo de 4
debemos completar con ceros a la izquierda.
110100110 = 0001
| {z } 0110
| {z } = 1a6
| {z } 1010
1
10=a
12=c
En el caso de que el n
umero de cifras binarias no sea m
ultiplo de 4
debemos completar con ceros a la izquierda.
110100110 = 0001
| {z } 0110
| {z } = 1a6
| {z } 1010
1
10=a
12=c
En el caso de que el n
umero de cifras binarias no sea m
ultiplo de 4
debemos completar con ceros a la izquierda.
110100110 = 0001
| {z } 0110
| {z } = 1a6
| {z } 1010
1
10=a
Tabla de Conversion
0000
0100
1000
1100
=
=
=
=
0
4
8
c
0001
0101
1001
1101
=
=
=
=
1
5
9
d
0010
0110
1010
1110
=
=
=
=
2
6
a
e
0011
0111
1011
1111
=
=
=
=
3
7
b
f
L[1:]
L[1:]
L[:1]
L[3:]
L[3:]
L[:3]
L[3:]
L[3:]
L[:3]
En general, la rotaci
on a la izquierda de k posiciones se puede hacer como
L[k: ] +L[ :k].
L[3:]
L[3:]
L[:3]
En general, la rotaci
on a la izquierda de k posiciones se puede hacer como
L[k: ] +L[ :k].
Si en lugar de rotar una posici
on a la izquierda lo queremos hacer a la derecha,
es decir, L = range(10) = [ 0,1,2,3,4,5,6,7,8,9] queremos convertirlo en
[ 9,0,1,2,3,4,5,6,7,8] podemos hacerlo tambi
en d
andonos cuenta de que
rotar a la derecha una posici
on es lo mismo que rotar a la izquierda nueve
posiciones. En general, rotar a la derecha k posiciones es lo mismo que rotar a
la izquierda n - k posiciones siendo n la longitud de la lista, por lo que podemos
usar L [ n - k : ] + L [ : n - k ] .
B = [1 ,0 ,1 ,1 ,0 ,1 ,0 , 0 ]
print ZZ (B , 2 ) , bin ( ZZ (B , 2 ) )
B = [1 ,0 ,1 ,1 ,0 ,1 ,0 , 0 ]
print ZZ (B , 2 ) , bin ( ZZ (B , 2 ) )
El n
umero que nos escribir
a es 45 que en binario es 0b101101 o escrito con 8
cifras 00101101.
B = [1 ,0 ,1 ,1 ,0 ,1 ,0 , 0 ]
print ZZ (B , 2 ) , bin ( ZZ (B , 2 ) )
El n
umero que nos escribir
a es 45 que en binario es 0b101101 o escrito con 8
cifras 00101101.
Si el sistema criptogr
afico representa los n
umeros con el bit menos significativo
a la derecha y nos piden, por ejemplo, rotar a la derecha k posiciones, podemos
utilizar la lista de cifras binarias, pero debemos tener en cuenta que sage nos ha
cambiado el orden por lo que, o bien tendremos que cambiar el orden usando
reverse o bien tendremos que hacer la rotaci
on hacia el otro lado.
B = [1 ,0 ,1 ,1 ,0 ,1 ,0 , 0 ]
print ZZ (B , 2 ) , bin ( ZZ (B , 2 ) )
El n
umero que nos escribir
a es 45 que en binario es 0b101101 o escrito con 8
cifras 00101101.
Si el sistema criptogr
afico representa los n
umeros con el bit menos significativo
a la derecha y nos piden, por ejemplo, rotar a la derecha k posiciones, podemos
utilizar la lista de cifras binarias, pero debemos tener en cuenta que sage nos ha
cambiado el orden por lo que, o bien tendremos que cambiar el orden usando
reverse o bien tendremos que hacer la rotaci
on hacia el otro lado.
Puede parecer un poco confuso y si tienes experiencia en programaci
on seguro
que te has encontrado alguna vez con lo de big endian y little endian, un
verdadero caos en la transmisi
on de datos y fuente de errores muy comunes en
programaci
on.
Cuidado
Es fundamental tener muy claro c
omo representa el programa los
n
umeros en relacion con sus bits y c
omo lo hace nuestro sistema
criptografico. Todos los estandares nos lo precisaran claramente y
debemos prestar mucha atenci
on a ello.