[pyar] Bitwise not..

Roberto Alsina ralsina en netmanagers.com.ar
Jue Jun 17 12:51:37 ART 2010


> 2010/6/17 Roberto Alsina <ralsina en netmanagers.com.ar>
> 
> > On Thursday 17 June 2010 09:26:05 Esteban Ordano wrote:
> > > Ojo que en esos ejemplos, el Xor no funciona así eh...
> > > 
> > > Y si después hacemos algo como
> > > 00001111 ^ (~00000111)  => 00001111 ^ 11110000 => 11111111
> > > 
> > > Ahí, estás haciendo 15 ^ ~7, que es 15 ^ -8 que dá 11110111, -9
> > 
> > Ahi como lo corregí varias veces, se me pianto un 1. Era
> > 
> > 00001111 ^ (~00000111)  => 00001111 ^ 11111000 => 11111111
> > 
> > El chiste es que vos estás asumiendo que lo que yo quiero que haga es lo
> > que
> > python hace :-)
> > 
> > Yo lo que decia es algo como el ~ de C que hace un "not" binario
> > (complemento
> > a uno), no complemento a dos.
> > 
> > Hacer que ~ sea complemento a dos es raro (por lo menos para mí), y no se
> > me
> > ocurre un caso en el que sea más útil.
> > 
> > O sea, el complemento a dos es simplemente -n-1, para qué quiero un
> > operador
> > binario para eso?

> Ugh perdón, no entiendo...
> 
> El símbolo ~ significa agarrá todos los bits y negalos.

Pero ahí está el chiste de lo que yo vengo diciendo.

Para "negar todos los bits" tenés que saber cuantos bits son, porque tenés que 
negar también los ceros a la izquierda!

> Que ~n sea igual a -n-1 es consecuencia de la representación binaria de los
> números... y por ahí en otras plataformas -n-1 dá otros resultados (en
> algunos SO, incluídos algunos POSIX, se guardan cada 4 bits, un decimal,
> ahí ya -n-1 no es lo mismo, creo que BSD hacía algo así)

No recuerdo ninguna plataforma en los últimos 30 años que guardara las cosas 
en memoria en binary coded decimal, eso era cosa de IBM :-)

> Los bitwise operators en Python yo tenía entendido que estaban pensados
> para que funcionen exactamente igual que en C/C++.

Da lo mismo numericamente. O sea, ~2 es -3 en C y en python.

Pero en C y C++ ese -3 puede ser distintas cosas porque la representación 
binaria de -3 en (ejemplo) char y long es distinta, y cuando estás manoseando 
bits eso es lo que importa. 

Yo preguntaba originalmente como se manejaba eso en python porque tambien hay 
dos tipos "enteros" de distinta longitud. Igual creo que ya más o menos lo 
entendí.




More information about the pyar mailing list